8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NestJSでHTTPリクエストを取り扱う

Last updated at Posted at 2022-05-29

NestJSの中でHTTPリクエストを投げたり、結果を取得したりする方法をまとめます。

前提

  • NestJS
  • TypeScript

モジュールをインストール

$ npm i --save @nestjs/axios
# or
$ yarn add @nestjs/axios

リクエストを投げる

サービス内でHTTPリクエストを投げる場合は、HTTPServiceを使えば大丈夫です。

//////////////////////////////////////////////////////////////////////////
//  このコードは意図した通りに動きません!
//////////////////////////////////////////////////////////////////////////
import { HttpService } from '@nestjs/axios';
import { lastValueFrom, map } from 'rxjs';

@Injectable()
export class HogeService {
  constructor(
    private httpService: HttpService,
  ) {}

  async GetData() {
    // ※これは期待通りにならない
    const result = await this.httpService.get("http://www.example.com/");
  }
}

上のコードは意図した通りに動きません。
その理由は、httpService.get()Observableを返すので、一般的なaxiosの使い方とは違う方法が必要なためです。
image.png

Observableはリアクティブプログラミングで用いられる用語です。

リアクティブプログラミング

ストリームと呼ばれるデータの流れを扱います。

  • pipe: データを受け取ったときの処理を書く
    • map: 新しい値を返す
  • lastValueFrom:最後の値を取得(ObservableからPromiseに変換)

toPromise()を使うサンプルコードもありますが、現在は非推奨です。

意図した通り動くコード

リアクティブプログラミングを意識して書く必要があります。

import { HttpService } from '@nestjs/axios';
import { lastValueFrom, map } from 'rxjs';

@Injectable()
export class HogeService {
  constructor(
    private httpService: HttpService,
  ) {}

  async GetData() {
    const result = await lastValueFrom(  // ObservableをPromiseに変換して最後の値を取得。
      this.httpService
        .get("http://www.example.com/")
        .pipe(map((response) => response.data)),  // pipe()でデータ取得時の処理を記述。mapで取得した内容のうちdataを返す
    );
  }
}

まとめ

NestJSのHTTPServiceではリアクティブプログラミングを意識したコードを書く必要があります。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?