5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Node.js】【Express】req.bodyが取得できない

Posted at

Progateを参考にNode.jsExpressejsでアプリを作成していたのだが、
POST処理のreq.bodyでFromの値を取得することができない。

app.js
app.post('/edit/:id',(req,res) => {
  connection.query(
    'UPDATE users SET name = $1 WHERE id = $2',
    [req.body.nname, req.params.id],  //ここでキャッチしたい〜
    (error,result) => {
      res.redirect('/top');
    }
  );
});

なんでや〜

いろいろ調べた結果、2つの原因が判明したので、メモ( ・∇・)

#原因1:body-parser
Expressでクライアントからデータを取得する場合、body-parserをインストールしてreq.body経由でデータを取得する必要があった。
なので以下の処理を実施

####1.body-parser のインストール

 $ npm install body-parser --save

####2.app.jsで使用できるように記述

app.js
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({
    extended: true
}));

##だがしかし!!!!!!!!!!
Express __ver.4.16.0以降は、Body-Parserの機能が標準で搭載__されているみたい!
そのため、わざわざbody-parserのインストールしなくてもよく、代わりにexpress.json()を使用すればいいみたい。

####1.express.json()を使用できるように、app.jsを編集

app.js
//const bodyParser = require("body-parser");
//app.use(bodyParser.urlencoded({
//    extended: true
//}));
//↓に変更
app.use(express.json());
app.use(express.urlencoded({
    extended: true
}));

#原因2:httpヘッダーのcontent-type
httpヘッダーのcontent-typeがapplication/x-www-form-urlencodedでないといけないとのこと。
自分はファイルの保存がしたくて、multipart/form-dataにしていたため、req.bodyが取得できなかったみたい。

Formでのcontent-typenの指定は、enctype=""で指定します。
ちなみに、何も指定しない場合は、デフォルトでapplication/x-www-form-urlencodedとなっているようです。

#おわりに
以上の2点を気をつけることで、無事にreq.bodyを取得することができるようになりました。
これ解決するまで2日くらいがんばりました。
終わってみれば、「こんなことかー」て思いますが、ここまでたどり着くのは大変でしたね。
ほんと独学は疲れる。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?