Express.js POST req.body为空

时间:2016-07-10 17:41:08

标签: javascript json node.js express body-parser

所以我在server.js文件中有以下代码,我在node.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是{}。我阅读了其他关于类似问题的Stack Overflow帖子,其中由于正文解析器,内容类型不正确。但这不是问题,因为内容类型是application / json。

如何获取请求的实际主体?

提前致谢。

4 个答案:

答案 0 :(得分:21)

你也需要bodyParser.json:

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

答案 1 :(得分:10)

如果您忘记将name属性放在表单输入字段中,有时req.body会显示{}。以下是一个例子:

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

然后req.body显示{ myemail: 'mathewjohnxxxx@gmail.com' }

我发布这个答案是因为,我遇到了类似的问题,这对我有用。

答案 2 :(得分:0)

请确保您要制作表格和javascript中的输入,然后将输入附加到表格中。那是我的问题。

yourForm.appendChild(yourInput);

答案 3 :(得分:0)

对我来说,后端配置正确,问题是有效的JSON格式,包括变量的双引号。

这不起作用

      const res = await axios.post(serverPath + "/user/login", {
         email: email,
         password: password,
      });

DID 工作(在电子邮件和密码两边加上双引号

      const res = await axios.post(serverPath + "/user/login", {
         "email": email,
         "password": password,
      });