Maison > Questions et réponses > le corps du texte
Je voulais imbriquer des routes dans NUXT 3, j'ai donc créé cette structure de fichiers/dossiers (affichant uniquement les parties avec lesquelles j'ai des difficultés) :
- Pages - Admin - Index.vue - Users - Index.vue - OtherRoute.vue
Cette structure de dossiers fonctionne bien lorsque je navigue via
- Je peux accéder à des pages comme celle-ci :
- 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)
Le problème est que lorsque je recharge la page ou que j'accède directement à l'url domain.com/admin/users NUXT, cela la change en domain.com/admin/admin-users
Pour une raison quelconque, NUXT ne peut pas résoudre cette URL lorsqu'il est accessible directement plutôt que via NuxtLink et génère une erreur 404. Existe-t-il un moyen d'avoir une structure de page comme celle-ci et de résoudre les changements de chemin inattendus ?
Modifier 1 Vidéo de ce qui s'est passé
Edit 2
Page Users.vue
<template> <TitleH1>Users</TitleH1> <TileList :tiles='tiles'></TileList> </template> <script setup> definePageMeta({ layout: "logged", }); const tiles = [ {title: 'Users', icon: 'ic:baseline-supervisor-account', to: '/admin/users'}, {title: 'Roles', icon: 'material-symbols:lock-person', to: '/admin/roles'}, {title: 'Units', icon: 'ph:tree-structure', to: '/admin/units'}, ] </script>
logged.vue(mise en page)
<template> <NavigationMain :key="$route.name" /> <div class="flex"> <NavigationSide /> <div class="w-full"> <div class="px-4 md:mx-auto xl:px-36"> <Breadcrumb /> <slot></slot> </div> <NotificationHub /> </div> </div> </template>
auth.global.js (le seul middleware fonctionnant sur cette page)
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') } } })
Merci
P粉8212313192024-03-28 19:13:26
Selon l'astuce de @ReaganM, l'erreur réside dans le middleware :
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') } } })
Je redirige vers to.name
,问题是嵌套路由的名称在我的情况下是像Folder-File
那样构建的Admin-Users
。因此,我更改了这部分代码并重定向到 to.path
et ça fonctionne très bien.
Middleware final
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') } } })