web-dev-qa-db-ja.com

Express.js POST req.body empty

したがって、node.jsで実行しているserver.jsファイルに次のコードがあります。 Expressを使用してHTTPリクエストを処理しています。

app.post('/api/destinations', function (req, res) {
  var new_destination = req.body;
  console.log(req.body);
  console.log(req.headers);
  db.Destination.create(new_destination, function(err, destination){
    if (err){
      res.send("Error: "+err);
    }
    res.json(destination);
  });
});

私はターミナルで以下を実行しています:

curl -XPOST -H "Content-Type: application/json" -d '{"location": "New York","haveBeen": true,"rating": 4}' http://localhost:3000/api/destinations

実行後、server.jsは以下を出力します。

{}
{ Host: 'localhost:3000',
  'user-agent': 'curl/7.43.0',
  accept: '*/*',
  'content-type': 'application/json',
  'content-length': '53' }

したがって、req.bodyは{}。 body-parserが原因でcontent-typeが正しくなかった同様の問題に関する他のStack Overflowの投稿を読みました。しかし、content-typeがapplication/jsonであるため、それは問題ではありません。

リクエストの実際の本文を取得する方法はありますか?

前もって感謝します。

8
Charlie Fish

BodyParser.jsonも必要です。

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
20
7zark7

Name属性をフォーム入力フィールドに配置するのを忘れた場合、req.bodyに{}が表示されることがあります。次に例を示します。

<input type="email" name="myemail" class="form-control" id="exampleInputEmail2" placeholder="Email address" required>

次に、req.bodyは{ myemail: '[email protected]' }

私がこの答えを投稿したのは、私が同様の問題に遭遇し、これが私のために働いたからです。

7
Mathew John

入力をフォームに追加するJavaScriptでフォームと入力を作成していることを確認します。それが私の問題でした。

yourForm.appendChild(yourInput);
0
Bradyo