私が始めています 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でチェックインするにはどうすればよいですか?
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
パラメータを検証する簡単な方法があります https://docs.nestjs.com/techniques/validation
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!'}
が合格しない場合に検証に合格します。