node.js + expressでPOST値を取得する方法
node.jsのexpressを使うと簡単にウェブアプリが作れて便利なのですが、expressのひな形はGET値しか受け取っていない。
server.js
app.configure(function () { app.use(express.bodyParser()); app.use(express.methodOverride()); app.set('views', __dirname + '/views'); app.set('view options', {layout: false}); app.set('view engine', 'ejs'); }); app.get('/login', function (req, res) { console.log(req.param.usrid + ' ' + req.param.passwd); // do something });
index.ejs
<form action="/login" method="GET"> <div> <span>User ID</span> <span><input type="text" name="usrid" id="usrid" /></span> </div> <!-- usrid --> <div> <span>Password</span> <span><input type="password" name="passwd" id="passwd"></span> </div> <!-- passwd --> </form>
これだとログイン画面から遷移したときに
/login?id=hoge&pass=fuga
みたいな形になってパスワードがバレバレになる。
そこでPOST値を扱えないか検索していたところ、見つけたのが次の記事
node.js+expressでPOSTパラメーターを取得する方法 ::ハブろぐ
app.getとなっているところをapp.postに変えてPOST値はreq.bodyで受け取ればいいらしい。
その際、app.configureのコールバック関数に
app.use(express.bodyParser()); app.use(express.methodOverride());
のパラメータを渡さないといけない。
また、methodOverrideはbodyParserの後に書かないといけない。
という訳でこんな感じになる。
server.js
app.configure(function () { app.use(express.bodyParser()); app.use(express.methodOverride()); app.set('views', __dirname + '/views'); app.set('view options', {layout: false}); app.set('view engine', 'ejs'); }); app.post('/login', function (req, res) { console.log(req.body.usrid + ' ' + req.body.passwd); // do something });
index.ejs
<form action="/login" method="POST"> <div> <span>User ID</span> <span><input type="text" name="usrid" id="usrid" /></span> </div> <!-- usrid --> <div> <span>Password</span> <span><input type="password" name="passwd" id="passwd"></span> </div> <!-- passwd --> </form>
試したところ、確かに取得できている!
これにセッション機能をつけるとウェブアプリっぽくなってきます。
nodeでセッション機能を使う方法はいろんな方のブログで書かれていますが、僕も備忘録的に書いておこうと思います。