如何在 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 参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中定义可选的查询参数?

使用“ ?: ”将 URL 中提供的传递参数设置为可选的 [Non-Capturing]

如何为带有可选 URL 参数的 GET 请求映射不同的 JSON 响应

在bash中使用getopts来获取可选的输入参数[重复]

如何处理 Play 框架中的可选查询参数

如何使 URL 参数匹配可选[重复]