全局配置axios、axios 拦截器 和 proxy 跨域代理

目录

一、全局配置axios

1. 为什么要全局配置 axios

2. 如何全局配置 axios

3. 在 vue3 的项目中全局配置axios

4. 在 vue2 的项目中全局配置 axios

二、axios 拦截器

1. 什么是拦截器

2. 配置请求拦截器

2.1 请求拦截器 – Token 认证 

2.2 请求拦截器 – 展示 Loading 效果

3. 配置响应拦截器

3.1 响应拦截器 – 关闭 Loading 效果

展示Loading效果实战示例:

三、proxy 跨域代理

1. 接口的跨域问题

2. 通过代理解决接口的跨域问题

3. 在项目中配置 proxy 代理

步骤1,在main.js 入口文件中,把 axios 的请求根路径改造为当前web 项目的根路径:​编辑

步骤2,在项目根目录下创建vue.config.js 的配置文件,并声明如下的配置:​编辑 


一、全局配置axios

1. 为什么要全局配置 axios

在实际项目开发中,乎每中都用到 axios 发起数据请求。此到如两个题:

每个组件中都需要导入 axios代码臃肿)

每次发请求都需要填完整不利的维

2. 如何全局配置 axios

main.js 入口文件中,通过 app.config.globalProperties 全局挂载 axios,示例代码如下:

3. vue3 的项目中全局配置axios

4. vue2 的项目中全局配置 axios

需要main.js 入口文件中,通Vue 构造函数prototype 原型对全局配置 axios:

二、axios 拦截器

1. 什么是拦截器

拦截器(英文:Interceptors)发起 ajax 请求得到响应的时自动被触发。

应用场景:

Token 身份认证

Loading 效果

etc…

2. 配置请求拦截器

通过 axios.interceptors.request.use(功的, 失败的回调) 可以配置请求拦截例代码如下:

注意失败的回调函可以

2.1 请求拦截器 Token 认证 

2.2 请求拦截器 展示 Loading 效果

借助element ui 提供的 Loading 效果组件

https://element.eleme.cn/#/zh-CN/component/loading)  可以方便的实现 Loading 效果的展示:

3. 配置响应拦截器

通过 axios.interceptors.response.use(功的, 失败的回调) 可以配置响应拦截。示代码如下:

注意失败的回调函可以 

3.1 响应拦截器 关闭 Loading 效果

调用 Loading 实例提供close() 方法即关闭 Loading 效果,示例代码如下:

展示Loading效果实战示例:

// 配置请求拦截器
let loadingInstance = null
axios.interceptors.request.use((config) => {
  // 展示Loading界面
  loadingInstance = Loading.service({ fullscreen: true })
  return config
})

// 响应拦截器
axios.interceptors.response.use((response) => {
  loadingInstance.close()
  return response
})

三、proxy 跨域代理

1. 接口的跨域问题

vue 项目运行的地址http://localhost:8080/

API 接口运行的地址:http://www.escook.cn/api/users

由于当前 API 接口没有开 CORS 跨域资源共享,因此况下上面无法求成

2. 通过代理解决接口的跨域问题

vue-cli 创建的项目在遇到接跨域题时式来解决:

axios 请求根路径设置vue 项目的运行地口请跨域)

vue 项目发现请求的接口不把请转交proxy 代理

代理把请求根路径devServer.proxy 属性的值,发起真的数请求

代理把请求到的数据转发给 axios

3. 在项目中配置 proxy 代理

步骤1,main.js 入口文件中,把 axios 的请求根路径改造web 项目的根路径

步骤2,项目根目vue.config.js 的配置文件,并声的配置: 

注意:

devServer.proxy 提供的代理功能在开调试

项目上线发布时,依API 接口服务器开启 CORS 跨域资源共享

猜你喜欢

转载自blog.csdn.net/qq_57587705/article/details/124869120