依據昨天的寫完,在token過期之后,再次調用接口,會觸發后端攔截,扔進全局錯誤處理中間件
前端說明提示都沒有,只有一個這個,現在優化一下,再寫一個類似全局后置守衛,當狀態碼是401的時候,重新登錄,可是原生沒有相應攔截器,昨天找的路由守衛也只能告訴to,from。翻看官方文檔,發現statuscode可以由uni.request成功回調的statuscode獲取,意思就是對昨天封裝的uni.request加一條statuscode判斷以及重定向就行
改了半天還是不會失敗自動跳轉,我以為響應攔截器寫錯了,于是升級了一下,可還是失敗
import config from "./config.js"const request = (options) => {return new Promise((resolve, reject) => {let token = uni.getStorageSync('token')uni.request({url: config.baseUrl + options.url,method: options.method || 'GET',header: options.header || {authorization: token,},data: options.data || {},success: (res) => {const data = resif (res.statusCode !== 200) {console.log(res.statusCode)handleStatus(res) //處理狀態碼return}resolve(data)},fail: (error) => {uni.showToast({icon: 'error',title: '系統錯誤'})reject(error)},complete: (res) => {}})})
}
const handleStatus = (res) => {switch (res.statusCode) {// 401: 未登錄// 未登錄則跳轉登錄頁面,并攜帶當前頁面的路徑// 在登錄成功后返回當前頁面,這一步需要在登錄頁操作。 case 401:uni.navigateTo({url: "/pages/login/login",})uni.showToast({icon: 'error',title: '未登錄'})returnbreak;// 403 token過期// 登錄過期對用戶進行提示// 清除本地token和清空vuex中token對象// 跳轉登錄頁面 case 403:uni.navigateTo({url: "/pages/login/login",fail:function(){console.log('fail')}})uni.showToast({icon: 'error',title: '登錄過期'})uni.removeStorageSync("token")break;// 404請求不存在case 404:break;// 其他錯誤,直接拋出錯誤提示default:}
}
export function get(option) {return new Promise((resolve, reject) => {request({...option,method:'GET'}).then(res => {resolve(res);}).catch(err => {reject(err)})});
}
export function post(option) {return new Promise((resolve, reject) => {request({...option,method: 'POST',}).then(res => {resolve(res);}).catch(err => {reject(err)})});
}
明明控制臺都打印了,可是就是不跳轉,頁面跳轉始終失敗
打印錯誤原因
當前頁面正在處于跳轉狀態,請稍后再進行跳轉....?
....返回未登錄時,需要跳轉到登錄授權頁,此時就會出現以上報錯信息,使用微信API就不會報錯了
可以說困擾一天了。。。
wx.redirectTo({url: "/pages/login/login",})