Vue中的axios深度探索:从基础安装到高级功能应用的全面指南

news2024/11/20 4:31:41

在这里插入图片描述


文章目录

  • 前言
  • 一、axios 请求
    • 1. axios的概念
    • 2. axios的安装
    • 3. axiso请求方式介绍
    • 4. axios请求本地数据
    • 5. axios跨域
    • 6. axios全局注册
    • 7. axios支持的请求类型
      • 1)get请求
      • 2)post请求
      • 3)put请求
      • 4)patch请求
      • 5)delete请求
  • 二、axios 进阶
    • 1. 设置axios拦截器
      • 什么是拦截器
      • 拦截器的作用和使用
    • 2. axios 封装


前言

    在Vue项目中,高效的前后端通信是构建丰富用户体验的关键。axios作为前端与后端沟通的桥梁,其重要性不言而喻。本文将带您领略axios的魅力,从基本概念、安装方法,到高级应用技巧,助您快速掌握在Vue中利用axios进行HTTP请求的精髓。我们不仅会探讨axios的基础用法,如GET、POST请求,还将深入探索跨域配置、全局注册以及设置拦截器等高级功能,助您轻松实现优雅的前后端通信。


一、axios 请求

1. axios的概念

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端。简单的理解就是ajax的封。

它本身具有以下特征:

  • 从浏览器中创建 XMLHttpRequest
  • 从 node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防止 CSRF/XSRF

2. axios的安装

npm install axios --save

3. axiso请求方式介绍

使用格式:

axios.提交方式("请求接口路径").then(箭头函数).catch(箭头函数)

 - 提交方式有get post delete put 等,
 - .then() 请求成功后执行then方法
 - .catch()请求失败后执行catch方法

例如:get具体使用方法如下:

//使用axios发送ajax请求,获取所有新闻信息
  fnSerachNews(){
	  // result是服务端对我们发起请求的响应,请求成功执行then方法
      this.$axios.get("http://localhost:8000/news/").then((result) => {
          //通过response获取具体数据,赋值给data中定义的newslist 
          this.newslist = result.data.data
          console.log(result.data.data);
      }).catch((err) => {
      	  //请求失败执行catch方法
          alert(err)
      });
  },

4. axios请求本地数据

1. 在static文件夹底下新建json文件

2. data.json数据格式如下:

{
    "first":[
        {"name":"张三","nick":"法外狂徒"},
        {"name":"李四","nick":"小李子"},
        {"name":"王五","nick":"小五"}
    ]
}

3. 在创建的TestView.vue中实现获取本地数据

<template>
  <div>
    <button @click="getData">获取本地数据</button>
    <p>{{ data.first }}</p>
    <ul v-for="(n, index) in data1.first" :key="index">
      <li>{{ n.name }}</li>
      <li>{{ n.nick }}</li>
    </ul>
  </div>
</template>

<script>
import Axios from "axios";
export default {
  name: "test",
  data() {
    return {
      // 定义变量, object 类型.
      data1: {},
    };
  },
  methods: {
    getData() {
      //   使用axios 请求本地数据
      //   axios.请求方式("请求接口路径").then(箭头函数).catch(箭头函数)
      Axios.get("../../../a.json")
        .then((response) => {
          // 把获取到的数据赋值给变量,然后展示
          console.log(response);
          console.log(response.data, typeof response.data);
          this.data1 = response.data;
        })
        .catch((error) => {
          // 请求失败
          console.log(error);
        });
    },
  },
};
</script>
<style lang="scss" scoped></style>

5. axios跨域

跨域的简单介绍及后端解决办法:点这0.0

这里在前端解决跨域:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave:false, /*关闭语法检查*/
  //开启代理服务器(方式一)vue3可能会由问题,如果第一种方式不可以,使用下面方式
	 devServer: {
     proxy: 'http://127.0.0.1:8000'
   }, 
	//开启代理服务器(方式二)
	devServer: {
    proxy: {
       //第一个跨域代理
      '/app': {
        target: 'http://127.0.0.1:8000/', //接口域名
        changeOrigin: true,             //是否跨域
        ws: true,                       //是否代理 websockets
        secure: false,                   //是否https接口
        // pathRewrite: {    //路径重置如果需要重置,可以重置成target地址
        //     '^/app':''
        // }
      },
      //第二个跨域代理
      '/home': {
        target: 'http://127.0.0.1:8000/',
        ws: true, //用于支持websocket
        changeOrigin: true //用于控制请求头中的host值
        // pathRewrite: {                  //路径重置
        //     '^/app':''
        // }
      }
    }
  }
})

6. axios全局注册

// main.js
import { createApp } from 'vue'
import App from './App.vue'

import  Axios  from "axios";
// 跨越配置好以后,测试结果
// Axios.defaults.baseURL = "http:127.0.0.1:8000"
const app = createApp(App)

app.config.globalProperties.$axios = Axios

app.mount('#app')

7. axios支持的请求类型

1)get请求

不带请求参数:

  • 方式一: axios({ methods: 'get', url: '/ulr' })
  • 方式二: axios.get('/url')


带请求参数:

  • 方式一: axios.get('/url', {params: {id: 12}})
    • 请求的地址实际为 http://localhost:8080/url?id=12
  • 方式二: axios({
              methods: ‘get’,
              url: ‘url’,
              params: {
                  id:12
               }
            })

2)post请求

let data = {}
let config = {}
方式一:  axios.post('/url',data,config)
方式二:  axios({
	 methods: 'post',
	 url: '/url',
	 data: data,
	 config: config
})

3)put请求

该请求和post类似,只是请求方法接口不同,传入对象的methods不同

4)patch请求

该请求和post类似,只是请求方法接口不同,传入对象的methods不同

5)delete请求

axios.delete('/url', {params: {id: 12}}) #参数在url params---很重要
axios.delete('/url', {data: {id: 12}}) #参数在请求体中 将params改为 data就行 

二、axios 进阶

1. 设置axios拦截器

什么是拦截器

request请求拦截器:发送请求前统一处理,如:设置请求头headers、应用的版本号、终端类型等。


response响应拦截器:有时候我们要根据响应的状态码来进行下一步操作,例如:由于当前的token过期,接口返回401未授权,那我们就要进行重新登录的操作。

拦截器的作用和使用

1. 作用:

  • 比如config中的一些信息不符合服务器的要求,得及时拦截下来更改。
  • 比如每次发送网络请求的时候,都希望在界面中显示一个动态加载的请求图标,就是一直在转圈圈,让用户知道当前页面正在加载数据,准备渲染视图。
  • 比如某些网络请求(比如登录token),必须携带一些特殊的信息。


2. 实现步骤:

const instance = axios.create({
  //baseURL:url,
  timeout:5000  // 延时
})

1、在requesr.js中设置请求拦截器
interceptors.request.use()
2、设置响应拦截器
interceptors.response.use()

核心代码:

// 请求拦截
instance.interceptors.request.use(
  function (config) {
    console.group('全局请求拦截')
    console.log(config)
    return config
  },
  function (err){
    return Promise.reject(err)
  }
)

// 响应拦截
// 服务器返回数据之后都会先执行此方法
instance.interceptors.response.use(
   function (response){
     console.group('全局响应拦截')
     console.log(response)
     return response
   },
  function (err){
     return Promise.reject(err)
  }
)

2. axios 封装

//  utils/request.js
import axios from "axios";
// const baseURL = "http://127.0.0.1:8000"; // 更换成自己的API接口地址
const axiosIns = axios.create({
//   baseURL,
  timeout: 10 * 1000 // 超时时间设置为10秒
});
// 封装get请求,并将封装的方法暴露出去
export const get = (url, params) => {
  return axiosIns.get(url,{params})
}
// 封装post请求
export const post = (url, data) => {
  return axiosIns.post(url,data)
}
// 封装put请求
export const put = (url, data) => {
  return axiosIns.put(url,data)
}
// 封装delete请求
export const del = (url, data) => {
  return axiosIns.delete(url,{data})
}
................................................
// 封装get
 get("https:/localhost:8000/news", {
        page: 3,
        per: 3,
      })
        .then((resp) => {
          console.log(resp.data);
        })
        .catch((error) => {
          console.log(error);
        });
....................................................        
// 封装post
post('https:/localhost:8000/news/login',{userName:'xiaoming',password:'111111'})
         .then(res=>{
           console.log(res)
         }).catch(err=>{
         console.log(err)
       })

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1881832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8s的基本使用和认识

目录 介绍 控制端 Node(节点) 控制端与节点的关系图 基本使用 创建和运行资源 查找和参看资源 修改和删除资源 介绍 控制端 api-server(api)是集群的核心是k8s中最重要的组件,因为它是实现声明式api的关键 kubernetes api-server的核心功能是提供了Kubernetes各类资…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP3008(SPI接口)的ADC转换器Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、RCC配置: 2)、SPI配置: 四、部分代码: 1)、主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main…

mysql8.0.19安装zip版本

下载地址https://downloads.mysql.com/archives/community/ 下载版本 下载后解压&#xff0c;不包括data 和my.ini文件。其中data 文件是自动生成的【mysqld --initialize --console】&#xff0c;my.ini需要自己编写设置。 新建my.ini文件 需要自己设置 basedirG:\soft\mysql…

华为DCN网络之:VXLAN

VXLAN RFC定义了VLAN扩展方案VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;。VXLAN采用MAC in UDP封装方式&#xff0c;是NVO3&#xff08;Network Virtualization over Layer 3&#xff09;中的一种网络虚拟化技术。 VXLAN…

android studio 添加aar包

按着以前旧的导包方式栽了大跟头&#xff0c;后面在留老板的的博客下找到了解决办法&#xff0c;记录一下。 Andriod Studio 导入aar最新的方式_gradle 8 引入arr-CSDN博客 最新导包方式 1.在新建libs目录&#xff0c;在app/libs目录下导入aar包&#xff08;其实就是拷贝过去…

hive4 从入门到精通

查询hive 架构 准备 HDFS配置 vim $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有节点的root用户都可作为代理用户--><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><!--配置root用户…

ETH巨鲸鱼异动和最大BTC爆仓

小编使用币界网地址监控工具&#xff0c;跟踪了在一次令人震惊的链上巨鲸地址异动&#xff0c;一个新创建的地址在过去四个小时内从 Coinbase 提取了价值 2121 万美元的 ETH。总共积累了 6,215 个 ETH&#xff0c;平均购买价格为每 ETH 3,414 美元。如此大规模的提款暗示着周一…

JVM原理(八):JVM虚拟机工具之基础故障工具

这里主要介绍监视虚拟机运行状态和进行故障处理的工具 1. jsp:虚拟机进程状况工具 jsp命令格式&#xff1a; jsp [options] [hostid] jps远程查询虚拟机进程状态 2. jstat:虚拟机统计信息监视工具 jstat命令格式&#xff1a; jstat [option vmid [interval [s|ms] [count]…

【Elasticsearch】Elasticsearch索引创建与管理详解

文章目录 &#x1f4d1;引言一、Elasticsearch 索引的基础概念二、创建索引2.1 使用默认设置创建索引2.2 自定义设置创建索引2.3 创建索引并设置映射 三、索引模板3.1 创建索引模板3.2 使用索引模板创建索引 四、管理索引4.1 查看索引4.2 更新索引设置4.3 删除索引 五、索引别名…

基于VUE3+VITE+SpringBoot+Nginx部署项目之跨域配置等问题

前言&#xff1a;遇到问题&#xff0c;解决问题。 第一部分&#xff1a;VUE 配置 1、vite.config.js 文件 server: {proxy: {/api: {target: env.VITE_BASE_URL,changeOrigin: true,secure: false,rewrite: path > path.replace(/^\/api/, )}}}, 2、.env 文件 VITE_BAS…

Tampermonkey 油猴脚本使用教程

Tampermonkey 油猴脚本使用教程 一、Tampermonkey 油猴脚本简介 Tampermonkey 是一款流行的浏览器扩展&#xff0c;它允许用户通过用户脚本增强网页功能或改变网页的外观。它支持包括 Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox 在内的多种浏览器。Tampermonkey…

搭建LNMP环境实现高并发请求

LNMP和Nginx详细配置 一、LNMP环境平台搭建准备工作源码软件包安装nginxmysqlphp使用nginx连接php 二、web服务器-nginx1.学nginx之前需要了解的知识1.1 同步和异步&#xff08;通知结果的方式&#xff09;1.2 阻塞和非阻塞&#xff08;进线程等待时状态&#xff09;1.3 epoll模…

.NET 漏洞情报 | 某整合管理平台SQL注入

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Github 2024-07-01开源项目月报 Top15

根据Github Trendings的统计,本月(2024-07-01统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6JavaScript项目3C++项目2PHP项目1Blade项目1非开发语言项目1C#项目1Lua项目1Go项目1MDX项目1Jupyter Notebook项目1从零开始构建你喜…

AI绘画:探索人工智能与艺术的奇妙结合

前言 人工智能技术的不断发展&#xff0c;使得AI绘画逐渐成为艺术领域的新宠。AI绘画是指利用人工智能算法进行绘画创作的一种艺术形式&#xff0c;它可以模拟人类艺术家的创作过程&#xff0c;创造出各种独特的艺术作品。 突破传统艺术的极限&#xff1a;AI绘画的无限可能性 …

学习CAN协议(二):使用CAN发送数据

相关文章 学习CAN协议&#xff08;一&#xff09;&#xff1a;CAN协议简介 学习CAN协议&#xff08;二&#xff09;&#xff1a;使用CAN发送数据 学习CAN协议&#xff08;三&#xff09;&#xff1a;使用CAN接收数据 目录 一、配置CubeMX 二、代码编写 CAN的发送示例代码…

数据资产的创新应用与未来展望:探讨数据资产在人工智能、物联网等新兴领域的应用前景,提出前瞻性的数据资产解决方案,为企业探索新的增长点,推动行业创新发展

目录 一、引言 二、数据资产在人工智能领域的应用 1、机器学习与深度学习 2、自然语言处理 3、计算机视觉 三、数据资产在物联网领域的应用 1、智能家居 2、工业物联网 3、智慧城市 四、前瞻性的数据资产解决方案 1、构建统一的数据管理平台 2、加强数据安全和隐私…

SAAM架构-系统架构师(十九)

1、&#xff08;重点&#xff09;&#xff08;问题1&#xff09;针对最终架构而非详细设计进行评估。&#xff08;问题2&#xff09;用于分析多种质量属性之间的折中。 问题1 A SAAM B ATAM C CBAM D SAEM 问题2 A SAAM B ATAM C CBAM D SAEM 解析&#xff1a; SAAM针…

3.js - MeshPhysicalMaterial - 虹彩效果

效果图 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween impor…

控制台厂家的创新设计主要体现在哪几方面

在当今科技飞速发展的时代&#xff0c;控制台厂家面临着不断变化的市场需求和激烈的竞争&#xff0c;创新设计成为了他们脱颖而出的关键。这些创新设计主要体现在以下几个引人注目的方面&#xff1a; 人体工程学的深度融合是一大亮点。控制台厂家充分考虑操作人员长时间工作的实…