vue的怎么在新建的axios.js拦截器文件里用vuerouter跳转

新建的http.js设置拦截器,怎么在请求拦截器里判断未登录,然后用vue-router跳转到登录页面

import axios from 'axios'
import { Message } from 'element-ui'
import Router from 'vue-router'

axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    console.log('请求呀')
    Router.push('/login')//这样用不对
    return config;
}, function (error) {
    // 对请求错误做些什么
    Message.error({message: '服务器故障', duration: 2000})
    return Promise.reject(error);
});

这样报错

阅读 13k
5 个回答

在路由文件router.js中新建路由实例

//router.js
const router = new vueRouter({
    routes,
    mode: 'history',
    base: __dirname,
    ...
});
...
export default router;

在需要使用路由的地方引入router

//axios.js
import router from 'router.js';
router.push(link);

这里是不行的,用window.location.href来跳转

main.js文件
const rootVueObj = new Vue({

router: router,
render: h => h(App),

}).$mount('#app');
export default rootVueObj;

api文件
import rootVueObj from '../main.js';
拦截器里用rootVueObj代替this

Axios 不适合做未登录的跳转
如果判断未登录最好的跳转方式是

import router from './router'

router.beforeEach((to, from, next) => {
  if (getToken()) { // 判断是否有token
      // 其他的逻辑
    } else {
      next('/login') // 否则全部重定向到登录页
    }
  }
})

axios.interceptors.response.use(
response => {

 if(response.data.code == "-999"){
    layer.msg("登录超时,请重新登录!")
     localStorage.clear();
     store.dispatch("add2")
     store.dispatch("del1")
     router.push({path: "/login"})
 }
return response;

},
error => {

  return Promise.reject(error)

});

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