わしのlog

プログラミングとかバイクとか。

【メモ】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に切り離したんだろう。
必要なものは自分でチョイスしてね。という意図があるんだろうか。

現場からは以上です。