やりたいこと
node.js - express でformを生成して、受け取った値を表示する
ググりながらやっていたら結構ハマったので多分初歩的なことですがメモとして残しておきます。
手順
jadeファイルでformを作る
form(method="POST", target="./")
input(type="text", name="word" value="")
input(type="hidden", name="mode" value="input")
input(type="submit", value="送信")
メインの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
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.use(bodyParser.urlencoded({extended: true}));
deprecated もなくなったのであとは表示のみ
jadeファイルの変数は#{}で囲む
p #{word}
無事にやりたいことが出来ましたー。