如何在 NestJS 中设置参数?

Posted

技术标签:

【中文标题】如何在 NestJS 中设置参数?【英文标题】:How to make param required in NestJS? 【发布时间】:2019-03-27 19:09:59 【问题描述】:

我想让我的路由 Query 参数是必需的。 如果它丢失,我希望它会抛出 404 HTTP 错误。

@Controller('')
export class AppController 
  constructor() 
  @Get('/businessdata/messages')
  public async getAllMessages(
    @Query('startDate', ValidateDate) startDate: string,
    @Query('endDate', ValidateDate) endDate: string,
  ): Promise<string> 
   ...
  

我正在使用NestJs pipes 来确定参数是否有效,但如果它存在则无效而且我不确定管道是为此而设计的。

那么如果我的参数存在,如果不抛出错误,我该如何检查 NestJS?

【问题讨论】:

您找到解决方案了吗?在框架内似乎是不可能的。看起来你必须编写一个自定义管道才能做到这一点? 是的,我终于有一个管道可以检查它是否为空 你能提供你的解决方案来检查缺少的参数吗? 【参考方案1】:

使用class-validator。管道绝对是为此而制造的!

示例: create-user.dto.ts

import  IsNotEmpty  from 'class-validator';

export class CreateUserDto 
   @IsNotEmpty()
   password: string;

有关更多信息,请参阅class-validator 文档: https://github.com/typestack/class-validator

以及 NestJS 管道和验证文档: https://docs.nestjs.com/pipes https://docs.nestjs.com/techniques/validation

【讨论】:

你能用这种方法处理@Query 参数吗?这些只是字符串。 @Get() getName( @Query name: string) return name 如果不提供密码值,您现在将收到 500 错误,那么我们该如何处理这种情况? @IsNotEmpty() 装饰器用于检查值是否为空或 null,但他不检查缺少的参数【参考方案2】:

有一个简单的方法来验证你的参数,https://docs.nestjs.com/techniques/validation

【讨论】:

【参考方案3】:

除了 Phi 的回答之外,您还可以将class-validator 的使用与以下全局验证管道相结合:

app.useGlobalPipes(
    new ValidationPipe(
      /*
            If set to true, instead of stripping non-whitelisted 
            properties validator will throw an exception.
      */
      forbidNonWhitelisted: true,
      /*
            If set to true, validator will strip validated (returned) 
            object of any properties that do not use any validation decorators.
      */
      whitelist: true,
    ),
  );

我使用它是为了只允许在 DTO 类中定义的参数,这样当请求发送未知参数时它会抛出错误!

在 Phie 的示例中,正文为 password: 'mypassword' 的 post 请求将通过验证,而 password: 'mypassword', other: 'reject me!' 则不会。

【讨论】:

以上是关于如何在 NestJS 中设置参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NestJS 中设置仅 HTTP cookie

如何在@nestjs/mongoose 模式中设置枚举

如何在nestjs中设置更多“jwt”AuthGuard?

我如何在 NESTJS 中设置多租户

如何在 NestJS 中设置类似 Angular 的配置环境文件?

如何在nestjs中设置morgan-body