Node.js: request モジュールを使って POST リクエストを行う
- Node.js: GET リクエストを行う
- Express: POST リクエストを処理する
- Node.js: request モジュールを使って GET リクエストを行う
- Node.js: request モジュールを使って POST リクエストを行う
- Node.js: superagent モジュールを使って GET、POST リクエストを行う
- Node.js: Restler を使って GET、POST リクエストを行う
- Node.js: connect を使って http サーバーを立ち上げる
GET リクエストに続き、POST リクエストも request モジュールを使って行う。フォーマットを「application/x-www-form-urlencoded」形式で送信する場合、form プロパティで指定する。レスポンスが JSON の場合、json プロパティに true を指定すれば、body に JSON.parse を適用する必要がなくなる。
var request = require('request'); var options = { uri: 'http://localhost:9000/', form: { name: 'テストユーザー' }, json: true }; request.post(options, function(error, response, body){ if (!error && response.statusCode == 200) { console.log(body.name); } else { console.log('error: '+ response.statusCode); } });
サーバーのコードは次のとおり。
var express = require('express'); var app = express(); app.use(express.bodyParser()); app.post('/', function(req, res){ var data = {}; data.name = req.body.name; res.set('Content-Type', 'application/json'); res.json(data); }); app.listen(9000);
比較のために http モジュールのコードを示す。
var http = require('http'); var querystring = require('querystring'); var options = { hostname: 'localhost', port: 9000, path: '', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }; var data = querystring.stringify({ 'name': 'テストユーザー' }); var req = http.request(options, function(res) { var body = ''; res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { var name = JSON.parse(body).name; console.log(name); }); }).on('error', function(e) { console.log(e.message); }); req.write(data); req.end();
クライアントが JSON を送信するようにコードを修正する場合、サーバーサイドのコードは修正しなくてもよい。これは connect の bodyParser のおかげである。
var request = require('request'); var options = { url: 'http://localhost:9000/', headers: { 'Content-Type': 'application/json' }, json: true, body: JSON.stringify({ name: 'テストユーザー' }) }; request.post(options, function(error, response, body){ if (!error && response.statusCode == 200) { console.log(body.name); } else { console.log('error: '+ response.statusCode); } });