Nuxt中间件里怎么获取路由参数?
我在写一个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')
}
})
在Nuxt 3里,params不是自动注入到route对象的,得用解构的方式从to里拿。试试这样改:
我当初也被坑了好久,后来发现Nuxt 3和Vue Router 4的机制变了。要点就一个:直接解构
to.params,别用to.route.params。顺便吐槽下,这API设计真够反直觉的,官方文档也不醒目,害我debug了半天。记住这个坑就行,其他中间件逻辑该怎么写还怎么写。