NestJSは、効率的でスケーラブルなNode.jsアプリケーションです。
generateコマンドも用意されており、シンプルかつ簡易にAPIを作成することができます。
今回はAPIから返却されるResponseを意図した形式に変換して返します。
このような形で返却します。
result にAPIから返すデータを格納します。
{
"status": "true",
"errorCode": "",
"result": []
}
目次
Response形式の変換
Responseのデータ形式を共通で変換するために Interceptors を利用します。
公式サイトを参照しながら type を指定します。
type Response<T> として定義し、result にさまざまな型を定義できるようにします。
ここでは、responseInterface.status = true; としていますが、例外がかえる場合は ExceptionFilter で status=false を設定します。
これにより、APIからの返却が200か、それ以外かを判定します。
import {
CallHandler,
ExecutionContext,
Injectable,
NestInterceptor,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
const responseInterface = {
status: false,
errorCode: '',
};
export type Response<T> = typeof responseInterface & {
result: T;
};
@Injectable()
export class TransformInterceptor<T>
implements NestInterceptor<T, Response<T>>
{
intercept(
context: ExecutionContext,
next: CallHandler,
): Observable<Response<T>> {
responseInterface.status = true;
return next
.handle()
.pipe(map((result) => Object.assign({}, responseInterface, { result })));
}
}
Interceptors をbindingする
main.ts で Interceptor を読み込みます。
async function bootstrap() {
const app = await NestFactory.create(AppModule, { cors: true });
app.useGlobalInterceptors(new TransformInterceptor());
await app.listen(3000);
}
bootstrap();