是否有任何方法可以检测请求何时包含未在其相应 DTO 中引用的查询参数?
例如,如果我有以下查询 DTO:
export class GetCustomersQueryDTO {
readonly firstName: string;
readonly lastName: string;
}
当请求包含 firstName
或 lastName
以外的查询参数时,我如何知道?例如:/customers?name=jon
最佳答案
根据我理解你的问题的方式,我想说你可以使用 NestJS 本身的 ValidationPipe
来实现这一点。
您可能需要稍微调整它以适合您的需求,具体取决于您是否只需要拒绝那些具有未知 DTO 属性的请求(在这种情况下,您可以使用 ValidationPipe
选项),或者如果您需要进行进一步处理(在这种情况下,您可能会使用 NestJS 的拦截器
功能)。
请参阅此页面,它可能对您有帮助: https://docs.nestjs.com/pipes#class-validator
基于上述文档链接 & Nest built-in ValidationPipe ,您对我的回答的第一条评论,以及 class-validator options docs ,针对您的用例使用 ValidationPipe
看起来像这样:
@Post()
@UsePipes(new ValidationPipe({ forbidUnknownValues: true }))
async search(@Body() getCustomersQueryDto: GetCustomersQueryDTO) {
this.usersService.search(getCustomersQueryDto);
}
注意1:当请求包含 CreateCatDto
类中未定义的属性时,这将引发错误。请参阅验证选项以进行更多调整。
注意2:您可以在 Controller 级别使用上述管道(在上面的示例代码中,它仅在 Controller 内的路由/方法级别)
如果有帮助请告诉我:)
关于validation - 如何检测相应 DTO 中未引用的查询参数的使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377623/