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) {
    // 不重要的代码
  }
}