axios 响应拦截的问题。~

小太阳大晴天
  • 69

问题情况:
axios的响应拦截,拦截401的情况。~
在我的pc浏览器上没问题,
可是换到手机上 只打印到
console.log('获取到app 当前登录用户')
就完了,后面的就都不执行了 简直令人作呕

axios.interceptors.response.use(
  response => {
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    error => {
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    console.log('进入401')
                    if (window.localStorage.getItem("_NATIVEUSERINFO")) {
                        console.log('获取到app 当前登录用户')
                        let { USERNAME, USERPWD } = JSON.parse(window.localStorage.getItem("_NATIVEUSERINFO"));
                        console.log('开始登录')
                        apiLogin({
                            phone: USERNAME,
                            password: USERPWD
                        })
                            .then(res => {
                                console.log(res)
                                if (res.code === 0) {
                                    console.log('登录成功')
                                    const token = "Bearer " + res.data.token;
                                    store.commit("changeLogin", token);
                                    location.reload()
                                } else {
                                    console.log('登录失败')
                                    if (_mm.isDevice.isIOS) {
                                        window.jsfanhui()
                                    } else if (_mm.isDevice.isAndroid) {
                                        window.hkb.finishNativePage();
                                    }
                                }
                            })
                            .catch(() => {
                                console.log('请求失败')
                                if (_mm.isDevice.isIOS) {
                                    window.jsfanhui()
                                } else if (_mm.isDevice.isAndroid) {
                                    window.hkb.finishNativePage();
                                }
                            })
                    } else {
                        console.log('获取app 当前登录用户 失败')
                        if (_mm.isDevice.isIOS) {
                            window.jsfanhui()
                        } else if (_mm.isDevice.isAndroid) {
                            window.hkb.finishNativePage();
                        }
                        /**
                         * wap 端处理
                         */
                        /*
                        Toast({
                            message: "登录过期,请重新登录",
                            forbidClick: true,
                            duration: 3000
                        });
                        setTimeout(() => {
                            router.replace({
                                path: '/login',
                                query: {
                                    redirect: router.currentRoute.fullPath
                                }
                            });
                        }, 3000)
                        */
                    }
                    break;

                // 404请求不存在
                case 404:
                    Toast({
                        message: '网络请求不存在',
                        duration: 5000,
                        forbidClick: true
                    });
                    break;

                // 422 参数错误捕获
                case 422:
                    Toast({
                        message: error.response.data.describe,
                        duration: 5000,
                        forbidClick: true
                    })
                    break;
                // 500 服务器错误
                case 500:
                    Toast({
                        message: '服务器维护中,请稍候再试',
                        duration: 5000,
                        forbidClick: true
                    });
                    break;
                // 其他错误,直接抛出错误提示
                default:
                    Toast({
                        message: error.response.data.describe,
                        duration: 5000,
                        forbidClick: true
                    });
            }
            // 返回接口返回的错误信息
            return Promise.reject(error.response);
        }
        // 判断请求异常信息中是否含有超时timeout字符串
        if (error.message.includes('timeout')) {
            return Promise.reject(error);
        }

    }
)
回复
阅读 531
2 个回答

如果是 获取到app 当前登录用户 有输出而 开始登录 没有:

有使用 babel 转译吗?没有的话会不会是你在移动端使用的浏览器不支持.

有的话会不会是你在移动端使用的浏览器不支持 localstoarge. (写个空白页面只执行读写 localstorage 试试)

或者直接 try catch

let { USERNAME, USERPWD } = JSON.parse(window.localStorage.getItem("_NATIVEUSERINFO"));

看看.

楼上说的对,目测是JSON.parse这句异常了。很可能你存储的值不是个json对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏