>  기사  >  웹 프론트엔드  >  Vue는 요청 인터셉터와 vue-resource 인터셉터 사용을 추가합니다.

Vue는 요청 인터셉터와 vue-resource 인터셉터 사용을 추가합니다.

不言
不言원래의
2018-06-30 16:47:122987검색

이 글에서는 주로 요청 인터셉터를 추가하는 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)

3. 이를 참조하고 별칭($ ajax) 전화 걸기 ) #

rrreee

ps: vue-resource의 사용을 살펴보겠습니다. 인터셉터

# 🎜🎜#

vue 프로젝트에서 vue-resource를 사용하는 과정에서 요구사항이 일시적으로 추가되었습니다. 이는 모든 http 요청에서 토큰 만료에 대한 판단을 추가해야 합니다. 페이지. 토큰이 만료된 경우 로그인 페이지로 이동해야 합니다. 각 페이지의 http 요청 작업에 판단을 추가하려면 매우 많은 양의 수정 작업이 필요합니다. 그렇다면 vue-resource에는 요청 응답을 캡처하는 공개 콜백 함수가 있습니까? 대답은 '예'입니다! vue-resource의 인터셉터는 바로 이러한 요구에 대한 솔루션입니다. 각 http 요청 응답 후 인터셉터가 다음과 같이 설정되면 인터셉터 기능이 먼저 실행되어 응답 본문을 얻은 다음

에 응답을 반환할지 여부를 결정한 다음 수신합니다. . 그런 다음 이 인터셉터에 응답 상태 코드에 대한 판단을 추가하여 로그인 페이지로 이동할지 아니면 현재 페이지에 머물면서 계속해서 데이터를 얻을지 결정할 수 있습니다.

main.js에 다음 코드가 추가되었습니다

rrreee

#🎜🎜##🎜🎜# 이 방법을 알기 전에는 어리석은 방법이지만 수정 작업량을 어느 정도 줄일 수도 있습니다. 이 방법은 this.$http.get 메서드 대신 this.$$http.get 메서드를 Vue에 바인딩하고 http 요청에 $를 추가하는 것입니다. 각 페이지 직전. #🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜##🎜🎜#위 내용은 모두의 학습에 도움이 되기를 바랍니다. PHP 중국어 웹사이트를 주목해주세요! #🎜🎜##🎜🎜#관련 권장 사항: #🎜🎜##🎜🎜##🎜🎜#상위 구성 요소의 vuex 메서드가 상태를 업데이트하고 하위 구성 요소를 제때에 업데이트하고 렌더링할 수 없는 문제를 해결하는 방법 #🎜🎜##🎜🎜##🎜🎜 ##🎜🎜##🎜🎜#vue 프로젝트 초기화 후 첫 번째 스타일러스 설치 방법 소개 #🎜🎜##🎜🎜##🎜🎜##🎜🎜# #🎜🎜##🎜🎜##🎜🎜 ##🎜🎜##🎜🎜#

위 내용은 Vue는 요청 인터셉터와 vue-resource 인터셉터 사용을 추가합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.