소위 인터셉터는 일부 파일을 가로채는 것입니다. 이 글에서는 주로 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에서 다양한 인터셉터를 구현하는 방법에 대한 아이디어
WeChat 애플릿 개발 페이지 인터셉터에 대한 자세한 설명
위 내용은 Vue 인터셉터 vue-resource 인터셉터 사용법 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!