<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        在Vue中使用axios請求攔截的實現方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:05:51
        文檔

        在Vue中使用axios請求攔截的實現方法

        在Vue中使用axios請求攔截的實現方法:一、前言 axios的基礎使用就不過多的講解啦,如何使用可以看axios文檔使用說明·Axios中文說明 在這里和大家分享一下axios攔截在實際項目中的使用 很多人都看過axios的官方文檔中攔截器這一欄,有的人可能會有點懵,因為文檔只告訴你有這個東西,而不告訴你在
        推薦度:
        導讀在Vue中使用axios請求攔截的實現方法:一、前言 axios的基礎使用就不過多的講解啦,如何使用可以看axios文檔使用說明·Axios中文說明 在這里和大家分享一下axios攔截在實際項目中的使用 很多人都看過axios的官方文檔中攔截器這一欄,有的人可能會有點懵,因為文檔只告訴你有這個東西,而不告訴你在

        一、前言

        axios的基礎使用就不過多的講解啦,如何使用可以看axios文檔使用說明·Axios中文說明

        在這里和大家分享一下axios攔截在實際項目中的使用

        很多人都看過axios的官方文檔中攔截器這一欄,有的人可能會有點懵,因為文檔只告訴你有這個東西,而不告訴你在什么情況下使用。很多初學者就會放棄使用axios攔截器,畢竟攔截器是可以不使用的,但是使用攔截器,會在頁面中減少很多不必要的代碼。

        二、說在前面的

        項目使用的ui框架是iview

        以下友好提示均使用iview ui的message提示組件,例如this.$Message.xxx

        /api/request 僅僅只是例子接口,實際開發用后臺提供的接口。

        code是后臺狀態碼,我這里也只是例子,不要問我為毛我的返回碼和你的怎么不一樣這樣的問題哈...這些都需要和后臺溝通約定的。

        使用的請求頭是:axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';至于為什么使用這個請求頭可以看看我的另外一篇文章關于axios會發送兩次請求,有個OPTIONS請求的問題
        因為使用的是這個請求頭所以需要用qs模塊,不然后臺不認這個數據。

        三、不使用請求攔截

        如果不使用請求攔截,也是可以的,但是會多了非常多的代碼,我們以登錄頁為例。

        一個單純,沒有花里胡哨的頁面,|ω・)

        //雙向數據綁定獲取值
        let httpRequest = {};
        httpRequest.loginName = this.loginName
        httpRequest.password= this.password
        this.$axios.post("/api/request", this.$qs.stringify(httpRequest)).then(data => {
         //特殊錯誤處理,狀態為10時為登錄超時
         if(data.data.code === 10){
         this.$Message.error("登錄已超時,請重新登錄")
         this.$router.push("/login")
         //其余錯誤狀態處理 
         }else if(data.data.code != 0){
         this.$Message.error(data.data.msg)
         //請求成功
         }else if(data.data.code === 0){
         //進行成功業務邏輯
         }
         //.......
        });

        如果不使用請求攔截,那么對每一條請求每一個狀態都要特殊處理,如果請求特殊狀態有數十個,每個頁面有很多請求,那么頁面會變得很長很臃腫,不好維護。

        三、使用請求攔截

        相同的請求返回代碼我們可以抽取出來,寫在請求攔截中

        當我們設置了攔截之后,在我們的組件代碼中可以簡化很多,還是以登錄界面為例:

        在main.js中

        //請求發送攔截,把數據發送給后臺之前做些什么......
        axios.interceptors.request.use((request) => {
         //這個例子中data是loginName和password
         let REQUEST_DATA = request.data
         //統一進行qs模塊轉換
         request.data = qs.stringify(REQUEST_DATA)
         //再發送給后臺
         return request;
        }, function (error) {
         // Do something with request error
         return Promise.reject(error);
        });
        //請求返回攔截,把數據返回到頁面之前做些什么...
        axios.interceptors.response.use((response) => {
         //特殊錯誤處理,狀態為10時為登錄超時
         if (response.data.code === 10) {
         iView.Message.error("登錄已超時,請重新登錄");
         router.push("/login")
         //其余錯誤狀態處理 
         } else if (response.data.code != 0) {
         iView.Message.error(response.data.msg)
         //請求成功
         } else if(response.data.code === 0){
         //將我們請求到的信息返回頁面中請求的邏輯
         return response;
         }
         //......
        }, function (error) {
         return Promise.reject(error);
        });
        //雙向數據綁定獲取值
        let httpRequest = {};
        httpRequest.loginName = this.loginName
        httpRequest.password= this.password
        this.$axios.post("/api/request", httpRequest).then(data => {
         //這是要先判斷data,如果請求的數據狀態code不為0,會被攔截,則data為undefined
         if(data){
         //進行請求返回成功邏輯
         }
        });

        這樣我們就對axios請求添加了攔截,可以減少很多代碼邏輯,頁面可讀性更高,可維護性也更高

        四、其他

        這就是axios攔截的最基礎的用法,當然也不止于此,我們也可以進行擴展延伸,做更多的事情,只要你的業務有需求,axios攔截總能幫到你,這些就需要舉一反三,工具是死的人是活的,我可以再舉個小例子,比如設置請求簽名。

        請求簽名是前臺和后臺約定的一種溝通方式,對數據進行加密,可以一定程度上保證數據的安全性

        還是以這個登錄頁面為例

        //雙向數據綁定獲取值
        let httpRequest = {};
        httpRequest.loginName = this.loginName
        httpRequest.password= this.password
        this.$axios.post("/api/request", httpRequest).then(data => {
         //這是要先判斷data,如果請求的數據狀態code不為0,會被攔截,則data為undefined
         if(data){
         //進行請求返回成功邏輯
         }
        });

        我們把httpRequest這個data信息數據發送給后臺之前,進行簽名,并加密數據

        在main.js中,我們對發送的數據進行攔截

        //請求發送攔截
        axios.interceptors.request.use((request) => {
         //獲取請求的數據,這里是loginName和password
         let REQUEST_DATA = request.data
         //獲取請求的地址,這里是/api/request
         let REQUEST_URL = request.url
         //設置簽名并進行qs轉換,且賦值給request的data,簽名函數另外封裝
         request.data = qs.stringify(requestDataFn(REQUEST_DATA, REQUEST_URL))
         //發送請求給后臺
         return request;
        }, function (error) {
         // Do something with request error
         return Promise.reject(error);
        });
        //已封裝好的簽名函數
        function requestDataFn(data, method) {
         let postData = {}
         //時間戳,時間戳函數不作展示,也是已封裝好的
         postData.timestamp = getNowFormatDate();
         //請求用戶的session以及secretKey信息,為空是未登錄,登錄后我把它存在localStorage中,這個存在哪里都可以,這里只作為例子。
         postData.session = localStorage.getItem('session') || '';
         postData.secretKey = localStorage.getItem('secretKey') || '';
         //請求的地址,這里是/api/request
         postData.method = method;
         //請求的數據這里是loginName和password,進行base64加密
         let base64Data = Base64.encode(JSON.stringify(data));
         //設置簽名并進行md5加密
         let signature = md5.hex(postData.secretKey + base64Data + postData.method + postData.session + postData.timestamp + postData.secretKey);
         //把數據再次進行加密
         postData.data = encodeURI(base64Data);
         postData.signature = signature;
         return postData
        }

        這樣我們就完成了對數據加密以及簽名,這樣再發送給后臺。

        注意:這里只作為例子展示,如果需要用到簽名,如何簽名,是前臺和后臺溝通的結果!

        axios請求攔截的用處遠遠不止這樣,具體如何使用,還需要在實際工作,實際項目中隨機應變啦。

        總結

        以上所述是小編給大家介紹的在Vue中使用axios請求攔截的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        在Vue中使用axios請求攔截的實現方法

        在Vue中使用axios請求攔截的實現方法:一、前言 axios的基礎使用就不過多的講解啦,如何使用可以看axios文檔使用說明·Axios中文說明 在這里和大家分享一下axios攔截在實際項目中的使用 很多人都看過axios的官方文檔中攔截器這一欄,有的人可能會有點懵,因為文檔只告訴你有這個東西,而不告訴你在
        推薦度:
        標簽: ios VUE 攔截
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av无码专区在线观看下载| 亚洲综合久久综合激情久久| 亚洲一区二区三区高清在线观看| 可以免费观看的毛片| 亚洲AV天天做在线观看| 久久99精品国产免费观看| 亚洲第一成年男人的天堂| 99ee6热久久免费精品6| 亚洲精品午夜久久久伊人| 国产人成免费视频网站| 亚洲av成人综合网| 日本特黄特色aa大片免费| 日韩亚洲翔田千里在线| 亚洲日本va午夜中文字幕久久| sss日本免费完整版在线观看| 久久99亚洲综合精品首页| 免费h视频在线观看| 亚洲精品免费在线视频| AA免费观看的1000部电影| 欧洲亚洲综合一区二区三区 | 最近最好最新2019中文字幕免费| 久久久久亚洲av无码专区蜜芽| 日本人的色道免费网站| 亚洲av无码一区二区三区人妖 | 亚洲卡一卡2卡三卡4麻豆| 成在线人永久免费视频播放| 特级毛片爽www免费版| 亚洲av无码潮喷在线观看| 日韩版码免费福利视频| 免费看一级高潮毛片| 亚洲日韩v无码中文字幕| 亚洲高清视频免费| 国产成人va亚洲电影| 午夜亚洲www湿好大| 日本精品人妻无码免费大全| 免费亚洲视频在线观看| 亚洲国产综合专区在线电影| 日韩视频在线免费| 久久免费观看国产精品| 国产精品久久久久久亚洲影视 | 国产精品无码素人福利免费|