前言
微信小程序通常使用wx.request發(fā)起 HTTPS 網(wǎng)絡(luò)請求
微信小程序官方說明文檔:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html
在接口請求中,經(jīng)常會遇到需要攔截器的場景,如統(tǒng)一接口報(bào)錯提示、統(tǒng)一登錄跳轉(zhuǎn)、統(tǒng)一header配置。
wx.request攔截器
- network.js
/**
* @module request
* 網(wǎng)絡(luò)ajax請求,并默認(rèn)處理失敗和成功提示等,并保留原來wx.request全部功能。
* @param {object} requestObject 跟wx.request相同的請求參數(shù)
*/
var app = getApp()
function request(requestObject) {
/* headers統(tǒng)一配置 */
if(!requestObject||!requestObject.header){
requestObject.header = {}
}
/* request事件攔截 */
var old_complate = requestObject.complete
var old_success = requestObject.success
var old_fail = requestObject.fail
/* request成功 */
requestObject.success = function (res) {
old_success && old_success(res)
const code = res.data.code
// 認(rèn)證令牌有誤或已過期,請重新獲取;強(qiáng)制跳轉(zhuǎn)到登錄頁面
if (['AUTHORIZATION_SESSION_NOT_FOUND', 'AUTHORIZE_TOKEN_INVALID'].includes(code)){
wx.removeStorageSync('access_token')
wx.removeStorageSync('userInfo')
wx.showModal({
content: res.data.message,
showCancel: false,
success: () => {
wx.reLaunch({
url: '/pages/login/login'
})
}
})
return
}
if (code === 'SUCCESS') {
return
}
app.showToast(res.data.message)
}
/* request失敗 */
requestObject.fail = function (res) {
old_fail && old_fail(res)
app.showToast(res.data.message)
}
/* request完成 */
requestObject.complete = function (res) {
old_complate && old_complate(res)
}
var requestTask = wx.request(requestObject)
return requestTask
}
module.exports = {
request
}
- 攔截器的使用:配置與wx.request(requestObject)完全一致
const net = require('../../utils/network.js');
net.request({
url: ``,
method: 'post',
data: { },
header: { },
success: res => { },
fail: res => { },
complete: res => { }
})