【NestJS】Responseを変換する方法

NestJSは、効率的でスケーラブルなNode.jsアプリケーションです。
generateコマンドも用意されており、シンプルかつ簡易にAPIを作成することができます。

今回はAPIから返却されるResponseを意図した形式に変換して返します。

このような形で返却します。
result にAPIから返すデータを格納します。

{
  "status": "true",
  "errorCode": "",
  "result": []
}
目次

Response形式の変換

Responseのデータ形式を共通で変換するために Interceptors を利用します。

NestJS 公式

公式サイトを参照しながら 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();
よかったらシェアしてね!
目次