名称空间模块auth的重复名称空间auth /

问题描述 投票:0回答:2

安装nuxtjs模块后,我一直收到此错误。我尝试了书中的所有技巧来修复它,但似乎没有任何效果。添加了更多信息。

[vuex] duplicate namespace auth/ for the namespaced module auth

我对此感到沮丧。

auth: {
    plugins: [{ src: '~/plugins/axios', ssr: true }, '~/plugins/auth.js'],
    vuex: {
      namespace: 'auth'
    },
    strategies: {
      local: {
        endpoints: {
          login: {
            url: "login",
            method: "post",
            propertyName: "meta.token"
          },
          user: {
            url: "me",
            method: "get",
            propertyName: false
          },
          logout: {
            url: "logout",
            method: "post"
          },
          redirect: {
            login: "login",
            logout: "/",
            home: "/",
            callback: "/"
          },
          watchLoggedIn: true,
          rewriteRedirects: true
        }
      }
    }
  },

插件

plugins: [
    { src: "~/plugins/Maps.js", ssr: false },
    { src: "~/plugins/Typed.js", ssr: false },
    { src: "~/plugins/Animate.js", ssr: false },
    { src: "~/plugins/Counter.js", ssr: false },
    { src: "~plugins/Vimeo.js", ssr: false },
    "~plugins/mixins/user.js",
    "~plugins/mixins/validation.js",
  ],

auth.js << ----商店

export const getters = {
    authenticated(state) {
        return state.loggedIn;
    },
    user(state) {
        return state.user;
    }
};

export const state = () => ({
    busy: false,
    loggedIn: false,
    strategy: "local",
    user: false
});

以下是代码,我目前有。如果您需要查看其他文件,请随时告诉我。

vue.js vuex nuxt.js nuxt
2个回答
0
投票

您可能在商店文件夹中有一个名为“ auth.js”的文件,并且没有在nuxt.config.js文件中明确设置vuex.namespace选项。

从文档:

store目录中的每个.js文件都转换为命名空间模块(索引是根模块)。

因此,“ auth”自动成为一个名称空间。

问题是“ auth”也是用于保持状态的默认Vuex存储名称空间,因为如果未显式设置默认值,则nuxt.config.js文件中的“ vuex.namespace”选项默认为“ auth”。那是重复的地方。

要解决此问题,请将您的store / auth.js更改为诸如store / authentication.js之类的其他内容,或者将nuxt.config.js文件中的vuex.namespace选项更改为除“ auth”以外的其他内容,否则它将被使用默认情况下。


0
投票

更新后,今天也遇到了同样的问题。解决:

将auth.js逻辑移至index.js并删除auth.js。

index.js:

export const getters = {
    authenticated(state) {
      return state.auth.loggedIn
    },

    user(state) {
      return state.auth.user
    }
  }

如果您使用的是user.js mixin,请如下修改:

import Vue from 'vue'
import {mapGetters} from 'vuex'

    const User = {
        install(Vue, options) {
            Vue.mixin({
                computed: {
                    ...mapGetters({
                        user: 'user',
                        authenticated: 'authenticated'
                    })
                }
            })
        }
    };

    Vue.use(User);
© www.soinside.com 2019 - 2024. All rights reserved.