validation - 如何检测相应 DTO 中未引用的查询参数的使用?

标签 validation dto nestjs

是否有任何方法可以检测请求何时包含未在其相应 DTO 中引用的查询参数?

例如,如果我有以下查询 DTO:

export class GetCustomersQueryDTO {
    readonly firstName: string;
    readonly lastName: string;
}

当请求包含 firstNamelastName 以外的查询参数时,我如何知道?例如:/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/

相关文章:

nestjs - Nestjs 路由版本控制?

java - 电子邮件验证模式 Unclosed Character Class

c# - 将 Entity Framework 模型导航属性转换为 DTO

design-patterns - CQRS 中的实体与 DTO

azure - Cosmos DB : Retryable writes are not supported. 请通过指定禁用可重试写入

node.js - nestjs 中的 Rxjs - 可观察到的订阅错误

php - 防止将 HTML 数据发布到表单文本框中

validation - JAXB 解码验证抛出 cvc-elt.1 : Cannot find the declaration of element error

c# - Entity Framework 中唯一字段的选项 - dbSet 的导航属性?

spring - 从 DTO 填充查询参数