目录
一、全局配置axios
二、axios 拦截器
三、proxy 跨域代理
首页 web前端 Vue.js 深析axios全局配置、拦截器和proxy跨域代理(图文)

深析axios全局配置、拦截器和proxy跨域代理(图文)

Aug 10, 2022 am 09:55 AM
axios

一、全局配置axios

1. 为什么要全局配置 axios

在实际项目开发中,几乎每个组件中都会用到 axios 发起数据请求。此时会遇到如下两个问题:

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

② 每次发请求都需要填写完整的请求路径(不利于后期的维护)【相关推荐:vue.js视频教程

647eba15d82af10fb4a0c6cc3a2fd15.jpg

2. 如何全局配置 axios

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

9d6265a512add97577a0e2c46944a0f.jpg

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

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

1836ff299ee2fd8d1840d490735eb1b.jpg

二、axios 拦截器

1. 什么是拦截器

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

c39166b57d13993d569530db013b0d7.jpg

2. 配置请求拦截器

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

f40c489bc8aa53106c951901188a969.jpg

2.1 请求拦截器 – Token 认证

5aca23173bd1dc6498ac0e437a5db72.jpg

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

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

5e7b5e5ff4d2cf57940debbf94e85f8.jpg

3. 配置响应拦截器

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

77cd910d0cd386d8ee805f399ce21e0.jpg

展示Loading效果实战示例:

b17db3d7aa76ed9ed96524fc70110cb.jpg

三、proxy 跨域代理

1. 接口的跨域问题

解决跨域 

1)、Cors(最标准的处理) 不需要前段人员做任何处理 只需要写服务器的人在服务器里面在返回响应的时候加几个特殊的响应头

2)、Jsonp 最巧妙的解决办法  借助了script标签里面的src属性 在引入外部资的时候不受同源策略限制这个特点办到的    在开发中很少用 因为需要前端+后端人员共同完成 而且也只能解决get请求的跨域问题 

3)、代理服务器

代理服务器也是个服务器 它的端口号和我们自身保持一致 两台服务器之间的交流不首同源策略限制 即这样便可解决跨域问题 所以在发请求的时候端口号也是8080

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

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

由于当前的 API 接口没有开启 CORS 跨域资源共享,因此默认情况下,上面的接口无法请求成功!

668bdcecb3e88b56506fb49362f5417.jpg

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

通过vue-cli 创建的项目在遇到接口跨域问题时,可以通过代理的方式来解决:

445b8954fc6ae5f2d446e188008f709.jpg

① 把 axios 的请求根路径设置为vue 项目的运行地址(接口请求不再跨域)

② vue 项目发现请求的接口不存在,把请求转交给proxy 代理

③ 代理把请求根路径替换为devServer.proxy 属性的值,发起真正的数据请求

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

3. 在项目中配置 proxy 代理

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

3c5ff26f641629d1ae0342bde6aaded.jpg

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

f1fe003973e9b20a65f7af8fa22ca9c.jpg

① devServer.proxy 提供的代理功能,仅在开发调试阶段生效

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

使用方式一配置代理服务器有两个不完美的地方:

1、不能灵活的控制走不走代理服务器

public文件夹相当于8080服务器的根路径(8080这台服务器里面有什么就取决于public文件夹里有什么)当请求的资源8080自身有的时候  就不会将这个请求转发至5000服务器

2、不能够配置多个代理,只能将请求转发给5000服务器

8b024d6684762910b569bfab046baa5.jpg

使用方式二开启代理服务器  ‘/api’ 请求前缀 

作用:当本地请求发送到代理服务器时 代理服务器会来判定 该请求的前缀是不是‘/api’,如果是 则发送请求(转发请求至5000),如果不是 则不发送请求 可以灵活的控制走不走代理服务器(‘/api’不是固定值,可自定义为‘/hah’ 等)

e9633a4852c5e29e185714b967256e3.jpg

前缀的携带位置:紧跟端口号

49240c784a57acae39cb38ba11dd89d.jpg

如果直接这么请求的话 会导致404错误 因为发送请求到5050服务器的时候携带的还是/api/students, 5050服务器有students但是没有/api/students

加上这个配置才能保证代理服务器发送到5050服务器请求时 只发送了/students 从而拿到数据

f9ff08a99fc3ff96aec9dab49ec6b8d.jpg

ws作用:用于支持websocket

changeOrigin:(用于控制请求头中host的值)

当changeOrigin:true时,代理服务器会表明自己也是5050服务器

当changeOrigin:false时,代理服务器表明自己是8080服务器

有时候5050服务器会有些限制 所以这个配置项最好设置为true。

ws和changeOrigin这两项如果不写的话 默认值也是true(在react中不写为false)

以上是深析axios全局配置、拦截器和proxy跨域代理(图文)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
在Vue应用中使用axios时出现“Uncaught (in promise) Error: Request failed with status code 500”怎么办? 在Vue应用中使用axios时出现“Uncaught (in promise) Error: Request failed with status code 500”怎么办? Jun 24, 2023 pm 05:33 PM

在Vue应用中使用axios是十分常见的,axios是一种基于Promise的HTTP客户端,可以用于浏览器和Node.js。在开发过程中,有时会出现“Uncaught(inpromise)Error:Requestfailedwithstatuscode500”的错误提示,对于开发者来说,这个错误提示可能有些难以理解和解决。本文将会探讨这

Vue中数据请求的选择:Axios or Fetch? Vue中数据请求的选择:Axios or Fetch? Jul 17, 2023 pm 06:30 PM

Vue中数据请求的选择:AxiosorFetch?在Vue开发中,处理数据请求是一个非常常见的任务。而选择使用哪种工具来进行数据请求,则是一个需要考虑的问题。在Vue中,最常见的两种工具是Axios和Fetch。本文将会比较这两种工具的优缺点,并给出一些示例代码来帮助你做出选择。Axios是一个基于Promise的HTTP客户端,可以在浏览器和Node.

在Vue应用中使用axios时出现“Error: Network Error”怎么解决? 在Vue应用中使用axios时出现“Error: Network Error”怎么解决? Jun 25, 2023 am 08:27 AM

在Vue应用中使用axios时出现“Error:NetworkError”怎么解决?在Vue应用的开发中,我们经常会使用到axios进行API的请求或数据的获取,但是有时我们会遇到axios请求出现“Error:NetworkError”的情况,这时我们该怎么办呢?首先,需要了解“Error:NetworkError”是什么意思,它通常表示网络连

在Vue应用中使用axios时出现“TypeError: Failed to fetch”怎么办? 在Vue应用中使用axios时出现“TypeError: Failed to fetch”怎么办? Jun 24, 2023 pm 11:03 PM

最近,在使用Vue应用开发过程中,我遇到了一个常见的问题:“TypeError:Failedtofetch”错误提示。这个问题出现在使用axios进行HTTP请求时,后端服务器没有正确响应请求时发生。这种错误提示通常表明请求无法到达服务器,可能是由于网络原因或服务器未响应造成的。出现这个错误提示后,我们应该怎么办呢?以下是一些解决方法:检查网络连接由于

Java axios与spring前后端分离传参规范是什么 Java axios与spring前后端分离传参规范是什么 May 03, 2023 pm 09:55 PM

一、@RequestParam注解对应的axios传参方法以下面的这段Springjava代码为例,接口使用POST协议,需要接受的参数分别是tsCode、indexCols、table。针对这个Spring的HTTP接口,axios该如何传参?有几种方法?我们来一一介绍。@PostMapping("/line")publicList

高效利用Vue和Axios实现前端数据的批量处理 高效利用Vue和Axios实现前端数据的批量处理 Jul 17, 2023 pm 10:43 PM

高效利用Vue和Axios实现前端数据的批量处理在前端开发中,数据的处理是一个常见的任务。当我们需要处理大量数据时,如果没有有效的方法,处理数据将会变得十分繁琐和低效。Vue是一种优秀的前端框架,而Axios是一个流行的网络请求库,它们可以协同工作来实现前端数据的批量处理。本文将详细介绍如何高效利用Vue和Axios来进行数据的批量处理,并提供相关的代码示例

axios和SpringBoot前端怎么调用后端接口进行数据交互 axios和SpringBoot前端怎么调用后端接口进行数据交互 May 13, 2023 am 10:34 AM

一、介绍一个完善的系统,前后端交互是必不可少的,这个过程可以分成下面几步:前端向后端发起请求后端接口接收前端的参数后,开始层层调用方法处理数据后端将最终数据返回给前端接口前端请求成功后,将数据渲染至界面二、项目结构前端技术:axios后端技术:SpringBoot(这个也无所谓,但是你一定要有控制层的访问路径,也就是所谓的请求地址对应的方法,可以用SSM框架,SSH框架,都可以)上面是大致的文件结构,相信大家后端的数据处理都没问题,无非就是:控制层接收前端请求,调用对应的业务层接口方法业务层实现

怎么使用vue3+ts+axios+pinia实现无感刷新 怎么使用vue3+ts+axios+pinia实现无感刷新 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia实现无感刷新1.先在项目中下载aiXos和pinianpmipinia--savenpminstallaxios--save2.封装axios请求-----下载js-cookienpmiJS-cookie-s//引入aixosimporttype{AxiosRequestConfig,AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

See all articles