使用Nest.js对多个查询进行Joi验证

时间:2020-05-28 21:05:31

标签: nestjs joi

我正在尝试对使用Joi进行多次查询的Nest.js上的GET请求进行验证。我了解如何使用UsePipes并在单个参数上验证单个对象。但是,我现在有一个具有多个查询的端点,这是我的控制器:

  @Get(':cpId/search')
  @UsePipes(new JoiValidationPipe(queryDTOSchema))
  async getSomethingByFilters(
  @Param('cpId') cpId: string,
  @Query('startDate') startDate?: number,
  @Query('endDate') endDate?: number,
  @Query('el') el?: string,
  @Query('fields') fields?: string,
  @Query('keyword') keyword?: string,
  @Query('page') page?: number,
  @Query('limit') limit?: number,
  )...

UsePipes现在正在针对每个查询验证相同的架构,而我不知道如何分别验证每个查询。

有没有办法分别验证每个查询?我找不到任何引用,我能想到的唯一解决方案是将所有这些查询转换为单个对象,这是不可取的在这种情况下。

1 个答案:

答案 0 :(得分:2)

您可以将管道作为查询装饰器的第二个参数传递:

@Query('startDate', new JoiValidationPipe(joi.number())) startDate?: number

但是我个人更希望将验证作为一个查询对象,因为它更易于阅读和处理:

@Get(':corporatePartnerId/search')
async getEmployeesByFilters(
  @Param('corporatePartnerId', new JoiValidationPipe(joi.string())) corporatePartnerId: string,
  @Query(new JoiValidationPipe(QueryDtoSchema)) query: QueryDto,
)