expressでpostでundefined
console.logでpostしたデータを確認しようとすると、
undefinedとなってしまうのがなかなか解決しなかった。
にわか知識ではつらい。。。
環境:
Mac OS X 10.6.7
node.js 0.4.8
express 2.3.7
とりあえず、このあたりを参考に:
node.js+expressでPOSTパラメーターを取得する方法 ::ハブろぐ
HugeDomains.com - HideYukiSaito.com is for sale (Hide Yuki Saito)
html(index.htmlという名前で)のform部分はこんな感じ:
<form action="/" method="post"> <input type="text" name="user[name]" /> <input type="submit" value="送信" /> </form>
で、server.jsというファイルを用意して(元ネタは前の記事を参照)、
postの部分は以下のような感じ:
app.use(express.bodyParser()); app.post('/', function(req, res){ console.log(req.body); res.redirect('back'); });
res.redirect('back');
がないと、ブラウザでレスポンスが返ってこなかった。。。
ターミナルを起動して、server.jsを実行。
$ node server.js
(以下が表示、されるようにconsole.logを書いておく。)
Server running at http://127.0.0.1:8124/
ブラウザで、
http://127.0.0.1:8124/
にアクセスし、postしてみると、ターミナルに、
undefined
と表示される。
ググッてみると、
bodyParserがないから、というのがヒットするけど、あるんだけどね。。。
で、
HugeDomains.com - HideYukiSaito.com is for sale (Hide Yuki Saito)
を見直して、
bodyParser()をconfigureで指定したところ、postした中身が表示された。
修正したserver.jsは以下。
// モジュールの読み込み var express = require('express'); // サーバーを作成 var app = express.createServer(); // configure app.configure(function() { app.use(express.bodyParser()); }); // '/'のリクエストハンドラ app.get('/', function(req, res) { res.sendfile('index.html'); }); // post app.post('/', function(req, res) { console.log(req.body); res.redirect('back'); }); // サーバーを起動 app.listen(8124, '127.0.0.1'); console.log('Server running at http://127.0.0.1:8124/');
で、「おれ」とか入力してpostすると、
ターミナルに以下のように表示された。
{ user: { name: 'おれ' } }