Nuxt中间件里怎么获取路由参数?

秀丽(打工版) 阅读 7

我在写一个Nuxt 3的项目,想在middleware里根据路由参数做权限判断,但发现ctx.route.params是空的。我试过用defineNuxtRouteMiddleware,也打印了route对象,params确实没值,这是为啥?

比如这个路由 /user/123/edit,我希望在中间件里拿到 params.id = ‘123’,但实际拿不到。

export default defineNuxtRouteMiddleware((to, from) => {
  console.log('params:', to.params) // 输出 {},明明URL里有参数
  if (to.params.id !== '123') {
    return navigateTo('/forbidden')
  }
})
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
设计师玉霞
这问题我踩过坑!Nuxt 3中间件里拿不到params是因为你少了个关键步骤。别走弯路,直接给你解决方案:

在Nuxt 3里,params不是自动注入到route对象的,得用解构的方式从to里拿。试试这样改:

export default defineNuxtRouteMiddleware((to) => {
const { id } = to.params
console.log('真实参数:', id) // 现在能拿到了

if (id !== '123') {
return navigateTo('/forbidden')
}
})


我当初也被坑了好久,后来发现Nuxt 3和Vue Router 4的机制变了。要点就一个:直接解构to.params,别用to.route.params

顺便吐槽下,这API设计真够反直觉的,官方文档也不醒目,害我debug了半天。记住这个坑就行,其他中间件逻辑该怎么写还怎么写。
点赞
2026-03-05 11:01