[NestJS] Validation
21482 ワード
いつ使いますか.
エラーコントロール
🙆♀️ 検証と同時にarrayに変換して使用できます.
Validation Webアプリケーションに送信されるデータの正確性を検証することが望ましい. 自動検証の要求を受信するために、Nestは、直ちに利用可能な複数のパイプを提供する. ValidationPipe(暗黙的な変換)
インストールの依存関係
Auto-validationアプリケーションレベルで デコーダを使用して、検証ルールを追加 エンドポイントに達すると、アプリケーションは
他のリクエスト・オブジェクトとの使用メソッドレベルの グローバルアクティブ のデフォルトでは、すべてのパスパラメータとクエリーパラメータは、ネットワークを介して (自動変換を無効にする)では、ParseIntPipeまたはParseBoolPipeを使用して値を明示的に鋳造できます. HTTP GETリクエストに入力されたクエリー・パラメータの有効性を確認します.
エラーコントロール
create-user.dto.ts
export class JoinRequestDto {
readonly email: string;
readonly nickname: string;
readonly password: string;
}
user.controller.ts
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
...
@Post()
create(@Body() joinRequestDto: JoinRequestDto) {
return this.userService.create(joinRequestDto);
}
}
🙅♀️タイプが定義したタイプに合わない場合、または必要に応じてrequestにいない場合は、各タイプをエラー処理できます.if (!email) {
throw new BadRequestException('이메일이 없네요');
}
if (!nickname) {
throw new BadRequestException('닉네임이 없네요');
}
if (!password) {
throw new BadRequestException('비밀번호이 없네요');
}
🙆♀️Nestは自動検証機能を提供します.import { IsNotEmpty } from 'class-validator';
export class JoinRequestDto {
@IsNotEmpty()
email: string;
@IsNotEmpty()
nickname: string;
@IsNotEmpty()
password: string;
}
response
が表示されると、エラーメッセージがクライアントに自動的に送信されます.{
"statusCode": 400,
"error": "Bad Request",
"message": ["email should not be empty",
"nickname should not be empty",
"password should not be empty"
]
}
せいけいかん🙆♀️ 検証と同時にarrayに変換して使用できます.
@Get()
findByIds(
@Query('ids', new ParseArrayPipe({ items: Number, separator: ',' }))
ids: number[],
) {
return 'This action returns users by ids';
}
役に立ちすぎたでしょう?じゃ、よく勉強しましょう.😀Validation
ValidationPipe
ParseIntPipe
ParseBoolPipe
ParseArrayPipe
ParseUUIDPipe
インストールの依存関係
$ npm i --save class-validator class-transformer
組み込みオプションexport interface ValidationPipeOptions extends ValidatorOptions {
transform?: boolean;
// true로 설정하면 유효성 검사 오류가 클라이언트에 반환되지 않습니다.
disableErrorMessages?: boolean;
// 유효성 검사 오류의 배열을 가져오고 throw할 예외 개체를 반환합니다.
exceptionFactory?: (errors: ValidationError[]) => any;
}
📢 この他にも複数選択があります.Auto-validation
ValidationPipe
がバインドされ、すべてのエンドポイントに適用されます.main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
import { IsEmail, IsNotEmpty } from 'class-validator';
export class JoinRequestDto {
@IsNotEmpty()
@IsEmail()
email: string;
@IsNotEmpty()
nickname: string;
@IsNotEmpty()
password: string;
}
400 Bad Request
コードに自動的に応答し、以下の応答本文を含む.{
"statusCode": 400,
"error": "Bad Request",
"message": ["email must be an email"]
}
📢 この他にも複数の検証ルールがあります.他のリクエスト・オブジェクトとの使用
import { IsNumberString } from 'class-validator';
export class FindOneParams {
@IsNumberString()
id: number;
}
@Get(':id')
findOne(@Param() params: FindOneParams) {
return 'This action returns a user';
}
形状の自動変換@Post()
@UsePipes(new ValidationPipe({ transform: true }))
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}
string
として提供されますが、number
として指定されている場合は、ValidationPipe
によって自動的に変換されます.app.useGlobalPipes(
new ValidationPipe({
transform: true,
}),
);
Parse*Pipe(明示的な変換)@Get(':id')
findOne(
@Param('id', ParseIntPipe) id: number,
@Query('sort', ParseBoolPipe) sort: boolean,
) {
console.log(typeof id === 'number'); // true
console.log(typeof sort === 'boolean'); // true
return 'This action returns a user';
}
シナリオの検証@Get()
findByIds(
@Query('ids', new ParseArrayPipe({ items: Number, separator: ',' }))
ids: number[],
) {
return 'This action returns users by ids';
}
GET /?ids=1,2,3
Reference
この問題について([NestJS] Validation), 我々は、より多くの情報をここで見つけました https://velog.io/@haron/NestJS-Validationテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol