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