如何在 NestjS 中使用可选的 url 参数

how to use optional url parameters with NestjS

我正在尝试使用 Nestjs 库替换我们当前的后端服务, 但是,我想在 URL 中创建一个带有 2 个可选参数的路由,例如:

/route/:param1/config/:OptionalParam3?/:OptionalParam3?

这意味着路线应该赶上:

  1. route/aa/config
  2. route/aa/config/bb
  3. route/aa/config/bb/cc

我怎样才能做到这一点,我尝试使用 ?() 但效果不佳。

路由器参数名称应该是唯一的。正确的路由路径是:

现有的是:

/route/:param1/config/:OptionalParam3?/:OptionalParam3?

更正:

/route/:param1/config/:OptionalParam3?/:OptionalParam4?

意见:如果参数是可选的,则可以使用查询参数。创建可选的参数路​​由从来都不是一个好主意(同意分歧)。两者的目的相同,但将它们作为查询参数可以让调试和其他开发人员更容易理解。

如果您正在寻找如何注释可选查询参数,您可以这样做:

@ApiQuery({
  name: "myParam",
  type: String,
  description: "A parameter. Optional",
  required: false
})
async myEndpoint(
  @Query("myParam") myParam?: string
): Promise<blah> { 
  [...] 
}

我使用 @Query 装饰器解决了这个问题,如下所示:

这是我的控制器:

@Get()
async getAll(@Query('someParameter') someParameter?: number) {
  return this.service.getAll(someParameter);
}

这是我的客户 (Angular) 服务:

getAll(someParameter?: number) {
  return this.http.get(`apiUrl/controllerAddress?someParameter=${someParameter}`
  );
}