如何在 NestjS 中使用可选的 url 参数
Posted
技术标签:
【中文标题】如何在 NestjS 中使用可选的 url 参数【英文标题】:how to use optional url parameters with NestjS 【发布时间】:2020-10-03 21:22:14 【问题描述】:我正在尝试使用 Nestjs 库替换我们当前的后端服务, 但是,我想在 URL 中创建一个带有 2 个可选参数的路由,例如:
/route/:param1/config/:OptionalParam3?/:OptionalParam3?
这意味着路线应该抓住:
route/aa/config
route/aa/config/bb
route/aa/config/bb/cc
我怎样才能做到这一点,我曾尝试使用?
和()
,但效果不佳。
【问题讨论】:
【参考方案1】:路由器参数名称应该是唯一的。正确的路由路径是:
现有一个是:
/route/:param1/config/:OptionalParam3?/:OptionalParam3?
更正:
/route/:param1/config/:OptionalParam3?/:OptionalParam4?
意见:如果参数是可选的,您可以使用查询参数。创建可选的参数路由绝不是一个好主意(同意的分歧)。两者的目的相同,但将它们作为查询参数使调试和其他开发人员更容易理解。
【讨论】:
@Vinayak Sarawagi
你的方法很有意义。但为了服务用户的 url 可读性,有时值得保留更长的 url,但选择较短
不适合我。不知道为什么会出现 404 错误。我的网址:resource1/:id1/resource2/:id2?
想出了另一种方式,因为解决方案在 NestJS @Delete([ 'resource1/:id1/resource2/:id2', 'resource1/:id1/resource2' ]) 中使用了类似的东西【参考方案2】:
如果您正在寻找如何注释可选查询参数,您可以这样做:
@ApiQuery(
name: "myParam",
type: String,
description: "A parameter. Optional",
required: false
)
async myEndpoint(
@Query("myParam") myParam?: string
): Promise<blah>
[...]
【讨论】:
以上是关于如何在 NestjS 中使用可选的 url 参数的主要内容,如果未能解决你的问题,请参考以下文章
使用“ ?: ”将 URL 中提供的传递参数设置为可选的 [Non-Capturing]