ExpressでPOSTを処理するメモ

  • 68
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

やりたいこと

node.js - express でformを生成して、受け取った値を表示する
ググりながらやっていたら結構ハマったので多分初歩的なことですがメモとして残しておきます。

手順

jadeファイルでformを作る

index.jade
form(method="POST", target="./")
            input(type="text", name="word" value="")
            input(type="hidden", name="mode" value="input")
            input(type="submit", value="送信")

メインのapp.jsファイル(一部抜粋)

app.js
app.post('/', function(req, res) {
    console.log(req.body);
    res.render('index', { title: 'Express Sample Posted ver 0.0.1', word: req.body.word});
});

実行すると以下のようにundefinedに・・・

console.log(req.body);// undefined

body-parserっていうのがいるらしい・・・

入れてみる。

npm install --save body-parser

app.js
var bodyParser = require('body-parser');
app.use(bodyParser());

実行!!

body-parser deprecated bodyParser: use individual json/urlencoded middlewares app.js:9:9
body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29
{ word: 'post', mode: 'input' } ←console.log(req.body)の結果

POSTの取得は出来たがdeprecated が出たため、訂正
urlencodedまたはjsonを使わなければいけないらしい。更にextended: trueを指定とのこと。

app.js
app.use(bodyParser.urlencoded({extended: true}));

deprecated もなくなったのであとは表示のみ
jadeファイルの変数は#{}で囲む

index.jade
p #{word}

無事にやりたいことが出来ましたー。