web-dev-qa-db-ja.com

NestJSで必要なパラメータを作成する

私が始めています NestJS (Powerfull Framework!)

ルートクエリパラメータを必須にします。そうしないと、エラー400がスローされます。

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

pipes を使用して、パラメーターが有効かどうかを判断していますが、存在する場合は判断していません。そのためにパイプが作成されているかどうかはわかりません。

では、エラーをスローしない場合、パラメータが存在するかどうかをNestJSでチェックインするにはどうすればよいですか?

4
infodev

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/pipeshttps://docs.nestjs.com/techniques/validation

6
Phie

パラメータを検証する簡単な方法があります https://docs.nestjs.com/techniques/validation

3
jkchao

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!'}が合格しない場合に検証に合格します。

0
Philou