【メモ】ExpressでPOSTした値を取得しようとするとundefinedになる
環境
Windows 10 64bit
Node.js v12.16.2
Express 4.17.1
現象
POSTした値がundefinedになる
こんな感じでいけるだろうと思ってドキュメント読まずに適当に書いたのが以下(一部略)。
'use strict' const express = require("express"); const app = express(); app.post("/hoge", (req, res) => { console.log(req.body) console.log(req.body.fuga) }); // 略
解
Express
の公式ドキュメント、req.body
の項を参照するとわかる。
以下、引用
Contains key-value pairs of data submitted in the request body.
By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.
body-parser
を導入しておけば、ミドルウェアとしてよしなにやってくれるということっぽい。
あれほど公式ドキュメントをよm(ry
ちなみに文中で触れているmulter
っていうやつはファイルアップロードなんかに使う
multipart/form-data
を処理するためのものっぽい。
とりあえず今はmultipart/form-data
を扱う気はないので、body-parser
を使おう。
直したものが以下。
'use strict' // requires const express = require("express"); const bodyParser = require('body-parser'); // express settings const app = express(); app.use(bodyParser.json()) app.post("/hoge", (req, res) => { console.log(req.body) console.log(req.body.fuga) }); // 略
これでbodyの中身が取得できるようになりました。
終わりに
行き詰ったら公式ドキュメントを読め・・・というか最初から公式ドキュメントを読めって感じですね。
ただ、やりたいことが頭の中にあるとどうしても先に手を動かしたり、参考ソースを見ちゃうんですよね・・・
Getting Started当たりから実装して、関連してそうなタイトルを公式ドキュメントからチョイスしていく形に
シフトできればこういった問題も無くなりそうだなと思いました。
にしてもなんでmiddlewareに切り離したんだろう。
必要なものは自分でチョイスしてね。という意図があるんだろうか。
現場からは以上です。