Heroku NodeJSでrequestモジュールを使うメモ(GET送信/POST送信/POST受信)

Express3系の記事と混乱してしまったのでExpress4のメモがてらrequestモジュールを使うメモです。

HerokuにNodeJSインストール

Getting Started with Node.js on Heroku | Heroku Dev Center

GET送信する

ローカルに必要なモジュールをインストール

npm install --save express
npm install --save request

参考記事

Node.js: request モジュールを使って GET リクエストを行う – Sarabande.jp

今回はためしにはてなブックマーク件数取得APIをつなげてみる

はてなブックマーク件数取得API – Hatena Developer Center

Herokuのベースから変更

var express = require('express');
var app = express();

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
  response.send('Hello World!');
});

app.listen(app.get('port'), function() {
  console.log('Node app is running on port', app.get('port'));
});

以下に変更。

var express = require('express');
var app = express();

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
    response.send('Hello World!');
});

// はてぶへGET送信
app.get('/hatebu/entry', function(request, response) {
    response.send('/hatebu/entry');

    var url = "http://api.b.st-hatena.com/entry.count?url=http%3A%2F%2Fwww.hatena.ne.jp%2F";

    var req = require('request');
    req.get(url, function(error, response, body){
        if (!error && response.statusCode == 200) {
            console.log(body);
        } else {
            console.log('error: '+ response.statusCode);
        }
    });

});

app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
});

デプロイしてURLにアクセス

デプロイして、

heroku logs --tail

でログを待ちつつ。

Herokuの /hatebu/entry にアクセスすると受け取れます。見やすく1行ごとに改行を入れています。

2015-05-21T06:01:46.909273+00:00 heroku[router]: at=info method=GET path="/hatebu/entry" host=                .herokuapp.com request_id=xxxxxxxxxxxxxxxxx fwd="xxx.xxx.xxx.xxx" dyno=web.1 connect=1ms service=34ms status=200 bytes=193

2015-05-21T06:01:47.712211+00:00 app[web.1]: 5516

はてブ数が5516と返っています。

POST送受信する

ローカルに必要なモジュールをインストール(body-parser)

npm install --save body-parser

参考記事

body-parserはExpress3だと内包されていたものがExpress4では外に分離されたらしい。

Node.js – ExpressでPOSTを処理するメモ – Qiita

Herokuのベースから変更

var express = require('express');
var app = express();

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
  response.send('Hello World!');
});

app.listen(app.get('port'), function() {
  console.log('Node app is running on port', app.get('port'));
});

以下に変更。

var express = require('express');
var app = express();
var bodyParser = require('body-parser'); // bodyParserを利用する

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.use(bodyParser.urlencoded({extended: true}));  // POST JSON送信する場合必要
app.use(bodyParser.json());  // JSON受信する場合必要

app.get('/', function(request, response) {
    response.send('Hello World!');
});

app.get('/post', function(request, response) {
    response.send("/post");

    // request.headers.hostは現状アクセスしてるホスト名
    // ローカルとHerokuを使い分けるときに使う
    var uri = 'http://' + request.headers.host + '/callback';  // callbackに送る
    console.log(uri);
    var req = require('request');
    var options = {
        uri: uri,
        form: {
            test:"123123123"
        },
        json: true
    };

    // POST送信
    req.post(options, function(error, response, body){
        if (!error && response.statusCode == 200) {
            console.log(body);
        } else {
            console.log('error: '+ response.statusCode);
        }
    });

});

// POSTの受け手 callback
app.post('/callback', function(req, res){
    res.set('Content-Type', 'application/json');
    console.log(req.body);
});

app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
});

デプロイしてURLにアクセス

デプロイして、

heroku logs --tail

でログを待ちつつ。

Herokuの <Herokuのアドレス>/post にアクセスすると <Herokuのアドレス>/callback にPOST送信するので結果がログに出ます。見やすく1行ごとに改行を入れています。

2015-05-21T06:45:32.424236+00:00 heroku[router]: at=info method=GET path="/post" host=xxxxxxxxxxxxxxxxxxxxxx.herokuapp.com request_id=xxxxxxxxxxxxxxxxxxxxxx fwd="xxx.xxx.xxx.xxx" dyno=web.1 connect=1ms service=10ms status=304 bytes=130

2015-05-21T06:45:32.430476+00:00 app[web.1]: http://xxxxxxxxxxxxxxxxxxxxxx.herokuapp.com/callback

2015-05-21T06:45:32.476130+00:00 app[web.1]: { test: '123123123' }

無事、{ test: '123123123' } が送受信されました。

それでは、よき NodeJS Request Lifeを!