你好,我想在NestJS中匹配这样的路由:
@Controller('posts')
export class PostsController {
@Get(:id)
getPostById() {}
@Get(:slug)
getPostBySlug() {}
}
问题是请求永远不会命中slug路由,我如何配置路由使id只与数字匹配,第二个只与字母和破折号匹配?
非常感谢:)
看起来有一个路径到regex包在@nest/common dependencies和我检查-你真的可以使用它。
https://www.npmjs.com/package/path-to-regexp
现在你可以通过设置regex:
使id只匹配数字@Get('/:id(\d+)')
我没有在NestJS官方文档中找到功能描述,但它可以工作。我的@nest/common包版本是8.4.1。
这是不可能的,因为当Express或fasttify为这个设置路由器时,它只是在查看匹配正则表达式的东西,并且没有限定符说"这是一个特定的slug
";或者"这绝对是一个id
";所以Express和fasttify能做的就是匹配第一条路线。您需要在控制器或服务中设置一个开关,以便根据参数调用任一方法,或者您需要在使用URL参数之前使路由可识别。@Get('/id/:id')
或@Get('/slug/:slug')
这在Nest的路由装饰器中是不可能的,但是你可以访问底层的express或fasttify实例,并使用它们的本地方法创建路由:
https://docs.nestjs.com/faq/http-adapter
https://expressjs.com/en/4x/api.html app.route
https://www.fastify.io/docs/latest/Routes/