Javascript vue路由器中未定义Vuex存储

Javascript vue路由器中未定义Vuex存储,javascript,vue.js,vuejs2,vuex,vue-router,Javascript,Vue.js,Vuejs2,Vuex,Vue Router,我在每个之前都有一个路由器和一个全局钩子来验证身份验证 从“@/store/store”导入存储; const路由器=新路由器({ //路线。。。 }); 路由器.beforeach((到、从、下一个)=>{ if(to.matched.some(record=>record.meta.requireAuth)){ 如果(!store.getters.getAccessToken){//未定义的存储 下一步(“/access/login”); } } 否则{ next(); } }); 导出默认

我在每个之前都有一个路由器和一个全局
钩子来验证身份验证

从“@/store/store”导入存储;
const路由器=新路由器({
//路线。。。
});
路由器.beforeach((到、从、下一个)=>{
if(to.matched.some(record=>record.meta.requireAuth)){
如果(!store.getters.getAccessToken){//未定义的存储
下一步(“/access/login”);
}
}
否则{
next();
}
});
导出默认路由器;
在我的
store/store.js
文件中,我有一个操作,请求验证用户/密码,然后尝试重定向到
/
路由(受保护的路由)

从“@/router”导入路由器;
//状态,getters。。。
行动:{
登录({commit},authData){
//axios实例原型化为vue$http对象
此._vm.$http.post(“/auth/login”,authData)
。然后(响应=>{
提交(“saveToken”,response.data.token);
})
.catch((错误)=>{
提交(“登录错误”,error.response.data);
});
}
},
突变:{
saveToken(状态、令牌){
state.accessToken=令牌;
路由器推送({
路径:“/”
});
},
登录错误(状态、数据){
返回数据消息;
}
}
我遇到的问题是
router.js
中的
存储
未定义的
。我已经检查了所有的导入、路由和名称好几次,它们都很好

由于我在
存储
中导入了
路由器
,在
路由器
中导入了
存储
,循环引用是否有问题

如果这是问题所在,我如何从路由器或从商店访问路由器

编辑

我已尝试从存储中删除路由器导入,但效果良好,但以下情况除外:

router.push({
    path: "/"
});
因为未导入
路由器

编辑:添加@tony19解决方案

我已经应用了@tony19提供的解决方案,效果很好,但当我访问
/
路由时,
router.app.$store
未定义

固定代码:

router.beforeach((to,from,next)=>{
log(`Routing from${from.path}到${to.path}`);
if(to.matched.some(record=>record.meta.requireAuth)){
if(!router.app.$store.getters[“authentication/getAccessToken”]){
下一步(“/access/login”);
}
否则{
next();
}
}
否则{
next();
}
});
调试会话的映像:


这确实是由循环引用引起的。通过使用,您可以避免导入
router.js
中的存储,它提供了路由器注入到的关联Vue实例的引用。有了它,你就可以通过
router.app.$store

router.beforeach((to,from,next)=>{
/* ... */
if(!router.app.$store.getters.getAccessToken){
下一步(“/access/login”);
}
});

这只是一个愚蠢的问题,你确定你正确导出了商店吗?删除存储区中的路由器引用时发生了什么?所有操作均按预期进行,但无法进行
路由器.push({path://“})因为路由器未导入。删除导入后,它可以工作,但此时未定义
$store
:。但这只是第一次加载页面。有没有使用
未定义的
变量的解决方案?