HTTP の GET/POST メソッドで送られてきたデータは、Request
オブジェクトの以下のプロパティを使って取得することができます。
req.query['name']
– GET メソッドの場合req.body['name']
– POST メソッドの場合上記の代わりに req.param()
メソッドを使用すると、GET/POST の区別無しにパラメータ取得することができますが、できれば GET/POST は明示的に区別して取得する方がよいでしょう(URI の部分文字列を取得する req.params
プロパティと混同しないようにしてください)。
次のサンプルでは、public/memo.html
のフォームから、/memo/create
という URI に対して GET でデータを送ります。
<!DOCTYPE html>
<meta charset="UTF-8">
<html>
<b>New Memo</b>
<form method="get" action="/memo/create">
<label for="title">Title</label>
<input type="text" id="title" name="memo[title]" size="50"></input><br>
<label for="body">Body</label>
<input type="text" id="body" name="memo[body]" size="50"></input><br>
<button type="submit">Submit</button>
</form>
</html>
var express = require('express');
var app = express();
app.use(express.static('./public')); // for publishing public/memo.html
app.get('/memo/create', function(req, res) {
var memo = req.query['memo'];
var s = 'Title = ' + memo['title'] + '<br>' +
'Body = ' + memo['body'];
res.send(s);
});
app.listen(3000, function() {
console.log('Listening on port 3000');
});
テストするときは、オブジェクトを JSON.stringify()
で文字列に出力した方が手っ取り早いかもですね。
POST メソッドで送られたデータを req.body
プロパティで参照するには、bodyParser
ミドルウェアを設定しておく必要があります。
<!DOCTYPE html>
<meta charset="UTF-8">
<html>
<b>New Memo</b>
<form method="post" action="/memo/create">
<label for="title">Title</label>
<input type="text" id="title" name="memo[title]" size="50"></input><br>
<label for="body">Body</label>
<input type="text" id="body" name="memo[body]" size="50"></input><br>
<button type="submit">Submit</button>
</form>
</html>
var express = require('express');
var app = express();
app.use(express.bodyParser()); // Handle POST messages
app.use(express.static('./public'));
app.post('/memo/create', function(req, res) {
var memo = req.body['memo'];
var s = 'Title = ' + memo['title'] + '<br>' +
'Body = ' + memo['body'];
res.send(s);
});
app.listen(3000, function() {
console.log('Listening on port 3000');
});
ここでは、フォームから送られたデータを req.query['name']
や req.body['name']
のように取得しましたが、GET/POST で JSON データなどを直接送ってきた場合は、そのオブジェクトを req.query
や req.body
で直接取得することができます。
例えば、jQuery の $.post()
で以下のように JSON データを送ったとします。
var data = {title:'Title1', body:'Body1'};
$.post('/memos/create', data, function() {}, 'JSON');
このようにクライアントから送られたデータは、以下のように取得できます。このケースでも bodyParser
ミドルウェアは必要です。
app.use(express.bodyParser());
app.post('/memos/create', function(req, res) {
var data = req.body;
...
}