Nuxt3 - 嵌套页面结构无法正常工作
P粉842215006
P粉842215006 2024-03-27 22:12:41
[Vue.js讨论组]

我想在 NUXT 3 中嵌套路由,所以我创建了这个文件/文件夹结构(仅显示我遇到困难的部分):

- Pages
   - Admin
     - Index.vue
     - Users
       - Index.vue
       - OtherRoute.vue

当我通过 导航时,此文件夹结构运行良好 - 我可以访问如下页面:

- domain.com/admin (Pages/Admin/index.vue)
- domain.com/admin/users (Pages/Admin/Users/index.vue)
- domain.com/admin/users/otherRoute (Pages/Admin/Users/otherRoute.vue)

问题是,当我重新加载页面或直接访问 url domain.com/admin/users NUXT 时,它会将其更改为 domain.com/admin/admin-users

由于某种原因,NUXT 在直接访问时无法解析此 url,而不是通过 NuxtLink 并抛出 404 错误。有没有办法拥有这样的页面结构并解决意外的路径更改?

编辑 1 发生了什么视频

编辑2

Users.vue 页面



logged.vue(布局)

auth.global.js(在该页面上运行的唯一中间件)

export default defineNuxtRouteMiddleware(async (to, from) => {
    const { isLogged, proceedAutoLogin } = useAuthStore();
        if (!isLogged){
            if (to.name !== 'login'){
                if (await proceedAutoLogin()){
                    return navigateTo(to.name)
                }else{
                    abortNavigation()
                    return navigateTo('/login')
                } 
            }
        }else{
            if (!await proceedAutoLogin()){
                abortNavigation()
                return navigateTo('/login')
            }
        }
  })

谢谢

P粉842215006
P粉842215006

全部回复(1)
P粉821231319

根据 @ReaganM 的提示,错误出在中间件中:

export default defineNuxtRouteMiddleware(async (to, from) => {
    const { isLogged, proceedAutoLogin } = useAuthStore();
        if (!isLogged){
            if (to.name !== 'login'){
                if (await proceedAutoLogin()){
                    return navigateTo(to.name)
                }else{
                    abortNavigation()
                    return navigateTo('/login')
                } 
            }
        }else{
            if (!await proceedAutoLogin()){
                abortNavigation()
                return navigateTo('/login')
            }
        }
  })

我正在重定向到to.name,问题是嵌套路由的名称在我的情况下是像Folder-File那样构建的Admin-Users 。因此,我更改了这部分代码并重定向到 to.path,效果很好。

最终中间件

export default defineNuxtRouteMiddleware(async (to, from) => {
    const { isLogged, proceedAutoLogin } = useAuthStore();
        if (!isLogged){
            if (to.name !== 'login'){
                if (await proceedAutoLogin()){
                    console.log(to)
                    return navigateTo(to.path)
                }else{
                    abortNavigation()
                    return navigateTo('/login')
                } 
            }
        }else{
            if (!await proceedAutoLogin()){
                abortNavigation()
                return navigateTo('/login')
            }
        }
  })
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号