Node.js・Expres・requestでHTTP(S)リクエストを発行する

2017-08-28

Node.js/ExpressアプリケーションからHTTP(S)を発行してみる。

使用するツール・ライブラリは以下。

  • HTTP(S)クライアント

以下の記事を読んだ前提で書く。

ちなみに HTTP(S)クライアントとしては request 以外にも以下のようなものがある。

  • http / https
    • Node.js のネイティブライブラリ
  • Unirest
  • axios
    • request が嫌ならこれがいいかな?

環境設定

先の記事で紹介したプロジェクトにて以下を実行する。

$ yarn add request

実装

  • app/controllers/get_ip.js
    • 自分のグローバルIPを取得するAPIにリクエストを発行するサンプル
    • http://[FQDN]/ip で動確

app/controllers/get_ip.js

const request = require('request');

const url = 'https://httpbin.org/ip';
const options = {
  url: url,
  method: 'GET',
  headers: {
    'Accept': 'application/json'
  }
};

const get_ip = (req, res, next) => {
  request(options, (error, response, body) => {
    if (!error) {
      console.log('response status: ' + response.statusCode);
      console.log('response headers content-type: ' + response.headers['content-type']);
      res.send(body);
    }
    else {
      console.log('error: ' + error.message);
      res.status(500);
      res.end('Internal Server Error'); // これがないとレスポンスが返らない
    }
  });
};

module.exports = get_ip;

request の基本的な使い方

  • request(options, callback)
  • request.defaults(options)
  • request.METHOD()

Promise

コールバック地獄を避けたい人は request-promise を使うと簡単に非同期 bluebird 版 Promise を実現できる。

導入

$ yarn add request-promise

実装 app/controllers/get_ip_promise.js

const request = require('request-promise');

const url = 'https://httpbin.org/ip';
const options = {
  url: url,
  method: 'GET',
  headers: {
    'Accept': 'application/json'
  },
  resolveWithFullResponse: true, // <--- これを入れないと responseオブジェクトが取得できない!!
  simple: true
};

const get_ip_promise = (req, res, next) => {
  request(options)
  .then((response) => {
    console.log('response status: ' + response.statusCode);
    console.log('response headers content-type: ' + response.headers['content-type']);
    res.send(response.body);
  })
  .catch((error) => {
    console.log('error: ' + error.message);
    res.status(500);
    res.end('Internal Server Error'); // これがないとレスポンスが返らない
  });
};

module.exports = get_ip_promise;

おすすめ書籍

おすすめ記事