使用 Nest.js 对多个查询进行 Joi 验证
Joi validation on multiple queries with Nest.js
我正在尝试验证 Nest.js 上的 GET 请求,该请求包含多个使用 Joi 的查询。我了解如何使用 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
现在针对每个查询验证相同的架构,我不明白如何分别验证每个查询。
有没有办法分别验证每个查询?我找不到任何参考,我能想到的唯一解决方案是将所有这些查询转换为一个对象,在这种情况下是不可取的。
您可以将管道作为查询装饰器的第二个参数传递:
@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,
)
我正在尝试验证 Nest.js 上的 GET 请求,该请求包含多个使用 Joi 的查询。我了解如何使用 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
现在针对每个查询验证相同的架构,我不明白如何分别验证每个查询。
有没有办法分别验证每个查询?我找不到任何参考,我能想到的唯一解决方案是将所有这些查询转换为一个对象,在这种情况下是不可取的。
您可以将管道作为查询装饰器的第二个参数传递:
@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,
)