Nuxt 3自定义认证中间件未被调用,求助排查遗漏步骤
排查Nuxt路由中间件无日志输出的问题
以下是可能遗漏的步骤和排查方向:
1. 确认日志输出位置
Nuxt 3的路由中间件默认是通用模式(同时在客户端和服务端执行):
- 首次访问页面时,中间件在服务端运行,日志会输出到终端/命令行窗口,而非浏览器控制台;
- 后续通过客户端路由跳转(比如
<NuxtLink>)时,日志才会出现在浏览器控制台。
2. 验证开发环境状态
确保你是用开发模式启动项目:
npm run dev
生产模式下(npm run build && npm run preview),console.log会被自动移除,无法看到输出。
3. 检查目录与文件命名
- 确认
middleware目录确实在项目根目录下,而非嵌套在src或其他子目录中(除非你配置了自定义源码目录); - 文件名
auth.ts拼写正确,中间件名称与definePageMeta中指定的'auth'完全一致(注意大小写,虽然Nuxt对文件名大小写不敏感,但尽量保持一致避免问题)。
4. 检查Nuxt版本兼容性
你使用的defineNuxtRouteMiddleware是Nuxt 3的专属语法,如果你正在使用Nuxt 2,写法完全不同:
Nuxt 2的中间件应该这样写(middleware/auth.js):
export default function ({ to, from }) { console.log('middleware/auth') console.log('to', to) console.log('from', from) return this.$router.push('/') }
页面中配置中间件的方式也不同:
export default { middleware: 'auth' }
5. 验证中间件是否被触发
可以临时移除重定向逻辑,确认中间件是否执行:
export default defineNuxtRouteMiddleware(async (to, from) => { console.log('middleware/auth') console.log('to', to) console.log('from', from) // 暂时注释重定向,看是否有日志输出 // return navigateTo('/') })
如果移除重定向后有日志,说明之前的重定向可能导致页面跳转过快,你没注意到终端的日志。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

