Nuxt.js 中间件刷新不触发的问题

最近在将vue用Nuxt改造的过程中遇到很多问题,比如在middleware中进行路由鉴权,路由地址改变时候是有效的,但是刷新不会触发该怎么解决,还有就是addRoutes在这里是未定义的。nuxt的路由是根据page文件夹路径自动生成的,之前vue在第三方插件中要想改变路由地址,只需要import router from '@/router' 就可以在第三方插件中使用router.push({path:'xxx'}),到nuxt中目前是用redirect修改路径的,请问这个又要怎么修改?
代码如下:

export default ({ store,route,redirect }) => {
let isNotFound = false
if(process.browser){

if(!route.name) {
  redirect( '/');
}
if (getToken()) {
      if (store.getters.roles.length === 0) {
        store.dispatch('GetInfo').then(res => {
          const roles =[ res.data.type ]
          store.dispatch('GenerateRoutes', { roles }).then(() => {
            // router.addRoutes(store.getters.addRouters)
          })
        }).catch(error=>{
            store.dispatch('LogOut')
        })
      }
  } else {
  
    if (!isNotFound) {
      store.dispatch('NotFoundRoutes').then(() => {
        isNotFound = true
         redirect('/login/index')
      })
    }
  }

}

}

阅读 10k
3 个回答

因为代码被当作服务端的代码执行了
在文件里加上当前服务环境的判断

  const isClient = process.client;
    //在客户端判读是否需要登陆
  if (isClient) {
    //只有当前环境在客户端才会执行
  }
新手上路,请多包涵

想要在客户端中刷新页面触发 middleware,只需要在 nuxt.config.js 中将 mode 设置为 spa,默认值是在服务器端触发,修改后刷新页面即可在客户端触发。
本人项目亲测可行。

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