使用不同通配符的NestJS匹配路由



你好,我想在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/