Nuxt3“await navigatorTo('/some-path')”第一次在“defineNuxtRouteMiddleware”内部调用时不起作用,但至少可以从外部声明正常工作

sai*_*sud 3 navigation middleware nuxt.js vuejs3 nuxt3

export default defineNuxtRouteMiddleware(async(to, from) => {
    const loggedIn = useState('loggedIn', () => false)
    if(loggedIn.value == false) {
        if(to.path == '/auth/login') {
            await navigateTo(to.path)
        }else if(to.path == '/') {
            await navigateTo('/auth/login')
        }else if(!(to.path == '/auth/login') or !(to.path == '/')) {
            //return abortNavigation()
            await navigateTo('/auth/login')
        }else {
            return abortNavigation()
        }
    }else {
        console.log('to:', to.path)
        console.log('from:', from.path)
        await navigateTo(to.path)
    }
})
Run Code Online (Sandbox Code Playgroud)

如果我浏览到以下几行,问题是"await navigateTo('/auth/login')"上面的代码不起作用".../dashboard",但当任何页面至少有一个"await navigateTo('/dashboard')". 它也适用于"return abortNavigation"

---
"else if(!(to.path == '/auth/login') or !(to.path == '/')) { 
    await navigateTo('/auth/login') 
}"
---
Run Code Online (Sandbox Code Playgroud)

"await navigateTo('/dashboard')"但我希望无需从任何页面第一次调用它就可以工作。

小智 5

尝试在调用navigateTo时使用return而不是await,您可以在文档中找到一个示例: https: //nuxt.com/docs/api/utils/navigate-to

export default defineNuxtRouteMiddleware((to, from) => {
  // setting the redirect code to '301 Moved Permanently'
  return navigateTo('/search', { redirectCode: 301 })
})
Run Code Online (Sandbox Code Playgroud)

如果您在中间件内部调用一个在出现错误时重定向用户的函数,请确保将 navigatorTo 返回给中间件调用方。