概要
APIエンドポイント
から返却されるレスポンスデータの形式をInterceptor
で変換した
{
"message": "success",
"statusCode": 200,
"errors": ""
}
Interceptor
を定義する
transform.interceptor.ts
import {Injectable, NestInterceptor, ExecutionContext, CallHandler} from '@nestjs/common';
import {Observable} from 'rxjs';
import {map} from 'rxjs/operators';
// オブジェクトのexport
export const Info = {
statusCode: 200,
message: 'success'
}
/**
* export type 型エイリアスのexport
* オブジェクトの値のユニオン型を作成
* typeof xxx & 型定義をマージして返却
*/
export type Response<T> = typeof Info & {
data: T
}
/**
* Object.assign で空オブジェクトに指定した形式で代入
*/
@Injectable()
export class TransformInterceptor<T> implements NestInterceptor<T, Response<T>> {
intercept(context: ExecutionContext, next: CallHandler): Observable<Response<T>> {
return next.handle().pipe(map(data => Object.assign({}, Info, {data})));
}
}
定義したInterceptor
をmain.ts
で読み込む
コア関数NestFactoryを使用してNestアプリケーションのインスタンスを生成するアプリケーションのエントリファイルです。
The entry file of the application which uses the core function NestFactory to create a Nest application instance.
main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: loggerFactory.useFactory('warn'),
})
app.useGlobalInterceptors(new TransformInterceptor())
}