이 글에서는 주로 요청 인터셉터를 추가하는 Vue와 vue-resource 인터셉터를 사용하는 방법을 소개합니다. 필요한 친구는
을 참고하세요. 1. 현상#🎜 🎜#
오류 및 구성 요청 정보 처리 일원화 2. 솔루션# 🎜 🎜#1. axios를 설치하고 다음 명령을 실행합니다. npm install axios --save-dev
2 구성 디렉터리에 새 파일 axios.js를 만듭니다. 루트 디렉터리의 내용은 다음과 같습니다: npm install axios --save-dev
2、在根目录的config目录下新建文件 axios.js ,内容如下:
import axios from 'axios' // 配置默认的host,假如你的API host是:http://api.htmlx.club axios.defaults.baseURL = 'http://api.htmlx.club' // 添加请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 return config }, function (error) { // 对请求错误做些什么 return Promise.reject(error) }); // 添加响应拦截器 axios.interceptors.response.use(function (response) { // 对响应数据做点什么 return response }, function (error) { // 对响应错误做点什么 return Promise.reject(error) });
3、在main.js中进行引用,并配置一个别名($ajax)来进行调用:
import axios from 'axios' import '../config/axios' Vue.prototype.$ajax = axios
如图:
4、应用,一个登录的post如:
this.$ajax({ method: 'post', url: '/login', data: { 'userName': 'xxx', 'password': 'xxx' } }).then(res => { console.log(res) })
ps:下面看下vue-resource 拦截器使用
在vue项目使用vue-resource的过程中,临时增加了一个需求,需要在任何一个页面任何一次http请求,增加对token过期的判断,如果token已过期,需要跳转至登录页面。如果要在每个页面中的http请求操作中添加一次判断,那么会是一个非常大的修改工作量。那么vue-resource是否存在一个对于任何一次请求响应捕获的的公共回调函数呢?答案是有的!
vue-resource的interceptors拦截器的作用正是解决此需求的妙方。在每次http的请求响应之后,如果设置了拦截器如下,会优先执行拦截器函数,获取响应体,然后才会决定是否把response返回给
then进行接收。那么我们可以在这个拦截器里边添加对响应状态码的判断,来决定是跳转到登录页面还是留在当前页面继续获取数据。
下边代码添加在main.js中
Vue.http.interceptors.push((request, next) => { console.log(this)//此处this为请求所在页面的Vue实例 // modify request request.method = 'POST';//在请求之前可以进行一些预处理和配置 // continue to next interceptor next((response) => {//在响应之后传给then之前对response进行修改和逻辑判断。对于token时候已过期的判断,就添加在此处,页面中任何一次http请求都会先调用此处方法 response.body = '...'; return response; }); });
在知道此方法之前,鄙人想了一个笨方法,但是也能在一定程度上降低修改工作量。方法是为Vue绑定一个this.$$http.get
方法取代this.$http.get
// ajax.js function plugin(Vue){ Object.defineProperties(Vue.prototype,{ $$http:{ get(){ return option(Vue); } } }) } function option(Vue){ let v = new Vue(); return { get(a,b){ let promise = new Promise(function(reslove,reject){ v.$http.get(a,b).then((res)=>{ reslove(res) },(err)=>{ //处理token过期问题。 }) }) return promise; } } } module.exports=plugin; //main.js import ajax from './ajax.js' Vue.use(ajax)
ps: vue-resource의 사용을 살펴보겠습니다. 인터셉터
vue 프로젝트에서 vue-resource를 사용하는 과정에서 요구사항이 일시적으로 추가되었습니다. 이는 모든 http 요청에서 토큰 만료에 대한 판단을 추가해야 합니다. 페이지. 토큰이 만료된 경우 로그인 페이지로 이동해야 합니다. 각 페이지의 http 요청 작업에 판단을 추가하려면 매우 많은 양의 수정 작업이 필요합니다. 그렇다면 vue-resource에는 요청 응답을 캡처하는 공개 콜백 함수가 있습니까? 대답은 '예'입니다! vue-resource의 인터셉터는 바로 이러한 요구에 대한 솔루션입니다. 각 http 요청 응답 후 인터셉터가 다음과 같이 설정되면 인터셉터 기능이 먼저 실행되어 응답 본문을 얻은 다음
rrreee
#🎜🎜##🎜🎜# 이 방법을 알기 전에는 어리석은 방법이지만 수정 작업량을 어느 정도 줄일 수도 있습니다. 이 방법은this.$http.get
메서드 대신 this.$$http.get
메서드를 Vue에 바인딩하고 http 요청에 $를 추가하는 것입니다. 각 페이지 직전. #🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜##🎜🎜#위 내용은 모두의 학습에 도움이 되기를 바랍니다. PHP 중국어 웹사이트를 주목해주세요! #🎜🎜##🎜🎜#관련 권장 사항: #🎜🎜##🎜🎜##🎜🎜#상위 구성 요소의 vuex 메서드가 상태를 업데이트하고 하위 구성 요소를 제때에 업데이트하고 렌더링할 수 없는 문제를 해결하는 방법 #🎜🎜##🎜🎜##🎜🎜 ##🎜🎜##🎜🎜#vue 프로젝트 초기화 후 첫 번째 스타일러스 설치 방법 소개 #🎜🎜##🎜🎜##🎜🎜##🎜🎜# #🎜🎜##🎜🎜##🎜🎜 ##🎜🎜##🎜🎜#위 내용은 Vue는 요청 인터셉터와 vue-resource 인터셉터 사용을 추가합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!