class-validator
リクエストボディやリクエストヘッダ、URL クエリをバリデートするには、class-validator を用いて reqBody や reqHeaders、query の型の代わりに class を定義します。
Deprecated after 0.30.0
frourio
および frourio-express
バージョン 0.30.0
以降では、バリデータに class-validator を使うことは非推奨となりました。
使用している場合は、ビルド時に警告が表示されます。Zod への移行を検討してください。
例
バリデータ
server/validators/index.ts
import { MinLength, IsString } from 'class-validator';
export class LoginBody {
@MinLength(5)
id: string;
@MinLength(8)
pass: string;
}
export class TokenHeader {
@IsString()
@MinLength(10)
token: string;
}
API 型定義
server/api/token/index.ts
import { LoginBody, TokenHeader } from '$/validators';
export type Methods = {
post: {
reqBody: LoginBody;
resBody: {
token: string;
};
};
delete: {
reqHeaders: TokenHeader;
};
};
結果
$ curl -X POST -H "Content-Type: application/json" -d '{"id":"correctId","pass":"correctPass"}' http://localhost:8080/api/token
{"token":"XXXXXXXXXX"}
$ curl -X POST -H "Content-Type: application/json" -d '{"id":"abc","pass":"12345"}' http://localhost:8080/api/token -i
HTTP/1.1 400 Bad Request
$ curl -X POST -H "Content-Type: application/json" -d '{"id":"incorrectId","pass":"incorrectPass"}' http://localhost:8080/api/token -i
HTTP/1.1 401 Unauthorized
バリデータオプションの指定
- Fastify
- Express
server/service/app.ts
import Fastify, { FastifyServerFactory } from 'fastify';
import server from '$/$server';
export const init = (serverFactory?: FastifyServerFactory) => {
const app = Fastify({ serverFactory });
server(app, { basePath: '/api', validator: { whitelist: true } });
return app;
};
server/service/app.ts
import express from 'express';
import server from '$/$server';
export const init = () => {
const app = express();
server(app, { basePath: '/api', validator: { whitelist: true } });
return app;
};