javascript - vuex 操作返回 false 时出现奇怪的控制台错误

标签 javascript vue.js vuex

你好,

我尝试使用 vuex 操作使用 vue 制作自定义导航守卫。

路由器防护的代码如下所示:

路由器.js

    {
      path: '/authusersonly',
      name: 'authusersonly',
      component: loadView('authusersonly'),
      async beforeEnter (to, from, next) {
        try {
          let authStatus = await store.dispatch('pingAuth', 'checkAuth')
          if (authStatus) next()
          else next('/login')
        } catch (error) {
          console.log(error)
          next('/')
        }
      }
    }

store.js 文件中的代码如下所示
actions: {
    async pingAuth ({ commit, state, getters, dispatch }, action) {
      let pingStatus = getters.pingStatus
      if (!pingStatus) {
         // here i do the user check using axios with await axios.......        
      }
      // here i return the results true or false
      return false
    }
  }

代码工作正常,但是当 pingAuth 操作返回 false 时,我收到奇怪的控制台错误,即使出现错误,用户也会正确重定向。

如果 pingAuth 返回 true,则控制台中不存在错误。
firefox 和 chrome 中的错误是不同的。

火狐错误
Firefox Console Error

Chrome 错误
Chrome Error

我试图在代码和框中重现该问题,但错误并不明显。我还尝试了一个新的干净的 vue 项目(所有依赖于最新版本)的代码并且有同样的错误。

谁能解释为什么我收到这个错误?

非常感谢。

ubuntu 19 上的 @vue/cli 4.0.5

包.js
  "dependencies": {
    "axios": "^0.19.0",
    "core-js": "^2.6.5",
    "date-fns": "1.29.0",
    "register-service-worker": "^1.6.2",
    "vue": "^2.6.10",
    "vue-i18n": "^8.14.1",
    "vue-router": "^3.0.3",
    "vuex": "^3.0.1"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.12.0",
    "@vue/cli-plugin-eslint": "^3.12.0",
    "@vue/cli-plugin-pwa": "^3.12.0",
    "@vue/cli-service": "^3.12.0",
    "@vue/eslint-config-standard": "^4.0.0",
    "babel-eslint": "^10.0.1",
    "eslint": "^5.16.0",
    "eslint-plugin-vue": "^5.0.0",
    "node-sass": "^4.12.0",
    "sass-loader": "^8.0.0",
    "vue-cli-plugin-vueth": "file:../plugin/",
    "vue-template-compiler": "^2.6.10"
  }

编辑:

我试图隔离问题。
问题来自路由器导航。

我为我的问题创建了一个 repo。
git clone https://github.com/thenutz/vue-router-error.git

yarn install

yarn serve

另一个有趣的事情是,如果我使用路由器链接进行导航,则不会出现错误。

我找到了解决此错误的方法。

如果我使用 @click="$router.push({ path: '/protected' }).catch((err) => {})"而不是 @click="$router.push({ path: '/protected' })"不存在错误。

最佳答案

请检查是否是这种情况。您正在访问“登录”页面并使用 next('login') 到同一页面。所以需要判断是否是同一个页面,如果是就用'next()'。

关于javascript - vuex 操作返回 false 时出现奇怪的控制台错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58860618/

相关文章:

laravel - 如何在 Inertia.js 中操作浏览器 url?

vue.js - 如何分解我的 vuex 文件?

javascript - 如何使用 jquery 隐藏一个模式并显示另一个模式?

javascript - 同步动态列表中的问题与来自服务器的请求列表(VueJs)

javascript - 2 个组件几乎完全相同。唯一的区别是每个组件都有不同的 GET 请求。合并他们?

javascript - 我可以在 Vue 实例方法内部传播的 mapMutations 中使用 "this"吗?

javascript - 如何从javascript函数调用vuejs函数?

javascript - 如何打开动态创建的模式已打开的页面

javascript - jQuery - 无法克隆表单内的嵌套行

javascript - 如何等到用户在文本输入中完成书写后调用函数?