Node.js/ExpressアプリケーションからHTTP(S)を発行してみる。
使用するツール・ライブラリは以下。
- HTTP(S)クライアント
以下の記事を読んだ前提で書く。
ちなみに HTTP(S)クライアントとしては 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)
- コールバックで
options
に基づいたリクエストを発行する - サンプルはこれを使用
- ドキュメント
- optiong の設定
- コールバックで
request.defaults(options)
- HTTP(S)クライアントのデフォルトの設定を行う
- ドキュメント
request.METHOD()
- HTTPメソッドを関数で表現する形式
- ドキュメント
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;
おすすめ書籍
リンク