> 웹 프론트엔드 > JS 튜토리얼 > Vue 인터셉터 vue-resource 인터셉터 사용법 자세한 설명

Vue 인터셉터 vue-resource 인터셉터 사용법 자세한 설명

小云云
풀어 주다: 2017-12-18 12:05:13
원래의
3097명이 탐색했습니다.

소위 인터셉터는 일부 파일을 가로채는 것입니다. 이 글에서는 주로 Vue에 대한 요청 인터셉터와 Vue-resource 인터셉터의 사용법을 소개합니다.

1. 현상

오류 및 구성 요청 정보 처리 통합

2. 솔루션

1. axios 설치, 명령: npm install axios --save-dev

2. 루트 디렉터리 .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. , 다음과 같은 로그인 게시물:

this.$ajax({
  method: 'post',
  url: '/login',
  data: {
    'userName': 'xxx',
    'password': 'xxx'
  }
}).then(res => {
  console.log(res)
})
로그인 후 복사

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

vue 프로젝트에서 vue-resource를 사용하는 과정에서 임시 요구 사항이 추가되었습니다. 모든 페이지의 http 요청에서 토큰 만료를 판단합니다. 토큰이 만료되어 로그인 페이지로 이동해야 합니다. 각 페이지의 http 요청 작업에 판단을 추가하려면 매우 많은 양의 수정 작업이 필요합니다. 그렇다면 vue-resource에는 요청 응답을 캡처하는 공개 콜백 함수가 있습니까? 대답은 그렇습니다!

vue-resource의 인터셉터는 바로 이러한 요구에 대한 솔루션입니다. 각 http 요청 응답 후 인터셉터가 다음과 같이 설정되면 인터셉터 기능이 먼저 실행되어 응답 본문을 얻은 후

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

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;
 });
});
로그인 후 복사

이 방법을 알기 전에는 말도 안되는 방법을 생각했는데 수정 작업량을 어느 정도 줄일 수도 있습니다. 이 방법은 this.$http.get 메서드 대신 this.$$http.get 메서드를 Vue에 바인딩하는 것입니다. 각 페이지의 http 요청에 대해 $http 앞에 $를 추가하면 됩니다.

// 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)
로그인 후 복사

다들 어떻게 배웠나요? 서둘러서 한번 시도해 보세요.

관련 권장 사항:

PHP에서 다양한 인터셉터를 구현하는 방법에 대한 아이디어

php 인터셉터 예제 코드 분석

WeChat 애플릿 개발 페이지 인터셉터에 대한 자세한 설명

위 내용은 Vue 인터셉터 vue-resource 인터셉터 사용법 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿