mpvue中使用flyjs全局?jǐn)r截的實(shí)現(xiàn)代碼
我們安裝好flyio之后
npm install flyio
找到src目錄下的main.js文件
首先引入flyjs并實(shí)例化
var Fly=require("flyio/dist/npm/wx") var fly=new Fly
比方說我們每次請(qǐng)求我們自己的服務(wù)器接口的時(shí)候需要帶上appID,用戶登陸后需要帶上openId
// 請(qǐng)求攔截 fly.interceptors.request.use((request)=>{ request.body.appId = 'xxx' // 用戶的openId在獲取之后添加到全局變量中如果存在,我們將它添加到請(qǐng)求參數(shù)里面 let openId = Vue.prototype.globalData.openId; if(openId){ request.body.openId = openId } })
當(dāng)服務(wù)器發(fā)生錯(cuò)誤,或者用戶網(wǎng)絡(luò)錯(cuò)誤導(dǎo)致請(qǐng)求失敗的時(shí)候,我們可以添加一個(gè)響應(yīng)攔截
// 響應(yīng)攔截 fly.interceptors.response.use( (response) => { }, (err) => { //發(fā)生網(wǎng)絡(luò)錯(cuò)誤后會(huì)走到這里 //return Promise.resolve("ssss") wx.hideLoading(); wx.showToast({ title:'網(wǎng)絡(luò)不流暢,請(qǐng)稍后再試!', icon:'none', }); })
最后將flyjs掛載到vue的原型上
// 將fly掛載在Vue的原型上 Vue.prototype.$flyio = fly
不同頁面直接使用this.$flyio請(qǐng)求(是不是很方便)
示例:
fly里面的攔截機(jī)制還是很強(qiáng)大的,并且在錯(cuò)誤返回信息做了優(yōu)化處理,在fly攔截器中支持執(zhí)行異步任務(wù),就是說在請(qǐng)求數(shù)據(jù)的時(shí)候如果攔截到token不存在那么我們就可以在攔截器中重新獲取token,再接著執(zhí)行之前的請(qǐng)求。
const Fly = require("flyio/dist/npm/wx") const fly = new Fly Vue.prototype.$http = fly; fly.interceptors.request.use((request) => { //給所有請(qǐng)求添加自定義header if (api.Get('token')) { request.timeout = 30000, request.headers = { "content-type": "application/json", "cld.stats.page_entry": api.Get('scene'), "version": store.state.version, "token": api.Get('token') } wx.showLoading({ title: "加載中", mask: true, }); return request; } else { fly.lock();//鎖住請(qǐng)求 return Public.Load().then(res => { request.timeout = 30000, request.headers = { "content-type": "application/json", "cld.stats.page_entry": api.Get('scene'), "version": store.state.version, "token": api.Get('token') } wx.showLoading({ title: "加載中", mask: true, }); //等待token返回之后在解鎖, fly.unlock(); return request;//繼續(xù)之前的請(qǐng)求, }) } }) fly.interceptors.response.use( (response) => { wx.hideLoading(); return response }, (err) => { wx.hideLoading(); if (err.status == 0) { return "網(wǎng)絡(luò)連接異常" } else if (err.status == 1) { return "網(wǎng)絡(luò)連接超時(shí)" } else if (err.status == 401) { return "用戶未登錄" } else { if (err.response.data.message) { return err.response.data.message } else { return '請(qǐng)求數(shù)據(jù)失敗,請(qǐng)稍后再試' } }; // Do something with response error } )
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- mpvue寫一個(gè)CPASS小程序的示例
- 解決mpvue + vuex 開發(fā)微信小程序vuex輔助函數(shù)mapState、mapGetters不可用問題
- mpvue跳轉(zhuǎn)頁面及注意事項(xiàng)
- mpvue小程序仿qq左滑置頂刪除組件
- 詳解使用mpvue開發(fā)github小程序總結(jié)
- 詳解mpvue開發(fā)小程序小總結(jié)
- mpvue 如何使用騰訊視頻插件的方法
- 淺談使用mpvue開發(fā)小程序需要注意和了解的知識(shí)點(diǎn)
- mpvue構(gòu)建小程序的方法(步驟+地址)
- 基于mpvue的小程序項(xiàng)目搭建的步驟
- 詳解基于mpvue的小程序markdown適配解決方案
- 使用Vue.js開發(fā)微信小程序開源框架mpvue解析
- mpvue中配置vuex并持久化到本地Storage圖文教程解析
相關(guān)文章
VUE項(xiàng)目中加載已保存的筆記實(shí)例方法
在本篇文章里小編給大家整理了一篇關(guān)于VUE項(xiàng)目中加載已保存的筆記實(shí)例方法,有興趣的讀者們可以參考下。2019-09-09vue中watch的實(shí)際開發(fā)學(xué)習(xí)筆記
watch是Vue實(shí)例的一個(gè)屬性是用來響應(yīng)數(shù)據(jù)的變化,需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí),這個(gè)方式是最有用的,下面這篇文章主要給大家介紹了關(guān)于vue中watch的實(shí)際開發(fā)筆記,需要的朋友可以參考下2022-11-11在 Vue 項(xiàng)目中引入 tinymce 富文本編輯器的完整代碼
這篇文章主要介紹了在 Vue 項(xiàng)目中引入 tinymce 富文本編輯器的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05Vue3如何理解ref toRef和toRefs的區(qū)別
本文主要介紹了Vue3如何理解ref toRef和toRefs的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12