Nest.js: バリデーション

November 6, 2021
1
$ npm i --save class-validator class-transformer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
src/main.ts

// 省略

 import { NestFactory } from '@nestjs/core';
 import { NestExpressApplication } from '@nestjs/platform-express';
+import { ValidationPipe } from '@nestjs/common';
 import * as expressLayouts from 'express-ejs-layouts';
 import { AppModule } from './app.module';
 
// 省略
 
   app.setViewEngine('ejs');
   app.use(expressLayouts);
+  app.useGlobalPipes(new ValidationPipe());
 
   await app.listen(3000);
 }
1
2
3
4
5
6
7
8
9
10
11
12
13
# src/posts/posts.dto.ts

+import { IsNotEmpty, IsString } from 'class-validator';
+
 export class CreatePostDto {
+  @IsNotEmpty()
+  @IsString()
   title: string;
+
+  @IsNotEmpty()
+  @IsString()
   content: string;
 }

これだけでJSONのエラーが返ってくるようになる。

Interceptorを使えば、HTMLにエラーを埋め込むのもできたけど、 「リダイレクトかレンダリングか」をやろうとしたら面倒だった。

まぁ全部をNestでやるんじゃなく、 クライアントはReact辺りでやってNestはAPIだけを担当するのがよいのであろうと思い、 あまり深入りしないことにした。