vue.js Nuxt i18n在中间件中调用useRoute可能会导致误导性结果

wwodge7n  于 2023-08-07  发布在  Vue.js
关注(0)|答案(2)|浏览(455)

所以我在nuxt3中得到了这个警告:第一个月
这是因为我在中间件中调用了useLocalePath()
这是其中一个中间件:

export default defineNuxtRouteMiddleware(async(to, from) => {
    const localPath = useLocalePath()

    const isUserAuthenticated = await isAuthenticated()

    if (isUserAuthenticated) {
        if (to.fullPath === localPath('login') || to.fullPath === localPath('register')) {
            return navigateTo(localPath('/'))
        }
    } else {
        if (to.fullPath !== localPath('login') && to.fullPath !== localPath('register')) {
            return navigateTo(localPath('login'))
        }
    }

})

字符串
我在nuxt.config.ts中有这样的代码:

i18n: {
        lazy: true,
        langDir: "locales",
        strategy: "prefix_and_default",
        locales: [
            {
                code: 'nl-Nl',
                iso: 'nl-Nl',
                name: 'Dutch',
                file: 'nl-NL.json'
            },
            {
                code: 'en',
                iso: 'en',
                name: 'English',
                file: 'en.json'
            },
        ],
        detectBrowserLanguage: {
            useCookie: true,
            cookieCrossOrigin: true,
            alwaysRedirect: true,
            cookieKey: 'i18n_redirected',
            redirectOn: 'root'
        },
        defaultLocale: "nl-Nl",
        customRoutes: 'config',
        pages: {
            pricing: {
                en: '/pricing',
                'nl-Nl': '/prijzen',
            }
        }
    }


下面是我使用的i18n版本:"@nuxtjs/i18n": "^8.0.0-beta.12",
问题是,代码运行得很好,但我不知道为什么它会给我这个警告。
忽略此警告是否安全?

7rtdyuoh

7rtdyuoh1#

useLocalePath()在后台使用了useRoute()方法,这就是为什么你会收到警告。一种解决方案是使用useI18n(),并访问App locale变量。

const { locale } = useI18n();

if (!to.fullPath.includes("login")) {
  return navigateTo(`${locale.value}/login`);
}

字符串

u3r8eeie

u3r8eeie2#

这对我很管用

export default defineNuxtRouteMiddleware(async(to, from) => {
    const nuxt = useNuxtApp()

    const isUserAuthenticated = await isAuthenticated()

    if (isUserAuthenticated) {
        if (to.fullPath === nuxt.$localePath('login') || to.fullPath === nuxt.$localePath('register')) {
            return navigateTo(nuxt.$localePath('/'))
        }
    } else {
        if (to.fullPath !== nuxt.$localePath('login') && to.fullPath !== nuxt.$localePath('register')) {
            return navigateTo(nuxt.$localePath('login'))
        }
    }

})

字符串

相关问题