日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue 无法进入response拦截器_vue拦截器的一次实践

發(fā)布時間:2023/12/2 vue 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue 无法进入response拦截器_vue拦截器的一次实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

起因

最近在做一個項目前端框架使用的是vue,項目接近尾聲的時候發(fā)現(xiàn)需要增加一個對所有的http請求過濾的功能,所有的請求需要加上token再發(fā)送給服務(wù)器,服務(wù)器根據(jù)token判斷用戶身份是否有效,響應(yīng)也需要過濾,判斷是否授權(quán),進行統(tǒng)一處理。經(jīng)過調(diào)研發(fā)現(xiàn),很多大佬推薦了vue-resource的interceptors攔截器,但是由于vue的作者尤雨溪已經(jīng)聲明不再對vue-resource進行維護,建議大家使用axios,所以果斷pass掉了這個方法。然后發(fā)現(xiàn),axios提供了interceptors關(guān)鍵字實現(xiàn)攔截器的功能,下面就詳細說明攔截器的實現(xiàn)。

第一步

在閱讀相關(guān)資料的時候,有兩種方法可以實現(xiàn)攔截器,設(shè)置配置文件和重新封裝axios,在嘗試第一種方法時會出現(xiàn)了無法解決的問題,無果,故采用了重新封裝axios的方法,首先在項目文件下新建utils文件夾,在該文件夾下新建文件httpAxios.js。

├── src

| ├──example.vue

| └──utils

| ├──httpAxios.js

第二步

http請求攔截器,首先對http的請求進行攔截,將所有的http請求報文的header加上Authorization字段,內(nèi)容為token,token之前通過vuex保存在store中。代碼如下:

// http request 攔截器

axios.interceptors.request.use(

(config) => {

if(store.state.token) {

config.headers.Authorization = `${store.state.token}`; // token保存在store中

}

return config;

},

(err) => {

return Promise.reject(err);

}

);

第三步

http響應(yīng)攔截器,對所有response進行判斷,401狀態(tài)碼表示未授權(quán),代碼如下:

// http response 攔截器

axios.interceptors.response.use(

(response) => {

return response;

},

(error) => {

if(error.response) {

switch (error.response.status) {

case 401:

router.replace({

path: '/login',

query: {redirect: router.currentRoute.fullPath}

});

}

}

return Promise.reject(error.response.data);

}

);

不過我司的授權(quán)并不是經(jīng)過瀏覽器實現(xiàn)的,是通過約定好的錯誤碼來表示用戶登錄失效,所以我并沒有在error中進行處理,而是在response中判斷錯誤碼來處理的。

最后整個httpAxios.js文件的內(nèi)容是:

import Vue from 'vue';

import axios from 'axios';

import store from '../store/';

// 默認配置

axios.defaults.baseURL = 'http://www.xxxx.com';

axios.defaults.headers.post['Content-Type'] = 'application/json';

export const request = (config) => {

return axios(config);

};

// http request 攔截器

axios.interceptors.request.use(

(config) => {

if(store.state.token) {

config.headers.Authorization = `${store.state.token}`; // token保存在store中

}

return config;

},

(err) => {

return Promise.reject(err);

}

);

// http response 攔截器

axios.interceptors.response.use(

(response) => {

return response;

},

(error) => {

if(error.response) {

switch (error.response.status) {

case 401:

router.replace({

path: '/login',

query: {redirect: router.currentRoute.fullPath}

});

}

}

return Promise.reject(error.response.data);

}

);

第四步

既然重新封裝了axios,那么使用方法當(dāng)然會有一些變化,下面舉例說明使用方法。如果要在example.vue中使用該插件,那么example.vue文件中應(yīng)該這樣寫:

import {request} from '/utils/httpAxios.js';

request({ method: 'post', url: '', data: {}

}). then(function (response) {

//處理成功的請求

}). catch(function (error) {

sonsole.log(error);

});

那么,http攔截器就完工了,可以愉快地使用了~

再啰嗦一句

第一次寫文章,希望能與大家分享技術(shù)踩過的坑,走過的路,也希望能和大家多多交流,共同進步。

總結(jié)

以上是生活随笔為你收集整理的vue 无法进入response拦截器_vue拦截器的一次实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。