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を!