nestjs 控制器路由优先级问题
nestjs 控制器路由优先级问题
问题复现
由于 /user/:id 执行优先级高于 @Get('follow') 所以 当访问
user/follow
会先触发:id
这个路由 导致出现问题
我这里的错误信息:
Cast to ObjectId failed for value "follow" at path "_id" for model "xxx"
,这个错误是因为follow字符串作为mongodb的_id 被判断是不符合所以抛出的错
@Controller('users')
export class XXXController {
@Get(':id')
async user(@Param('id') id: string) {
// 不重要的代码
}
@Get('follow')
async unfollow() {
// 不重要的代码
}
}
解决办法
当时看到这个错的时候有点蒙,有点不科学的样子,hh ,其实问题是由于路由优先级的问题
@Controller('users')
export class XXXController {
// 将其他路由放到动态路由的前面
@Get('follow')
async unfollow() {
// 不重要的代码
}
// 动态路由放在最后
@Get(':id')
async user(@Param('id') id: string) {
// 不重要的代码
}
}