Javascript Express.js POST req.body为空

Javascript Express.js POST req.body为空,javascript,json,node.js,express,body-parser,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(

因此,我的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是
{}
。我阅读了其他关于类似问题的堆栈溢出帖子,其中内容类型由于主体解析器而不正确。但这不是问题所在,因为内容类型是application/json

你知道如何获得请求的实际内容吗


提前感谢。

您还需要bodyParser.json:

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

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

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

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


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

确保如果您正在使用javascript制作表单和输入,那么您可以将输入附加到表单中。那是我的问题

yourForm.appendChild(yourInput);

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

这不起作用

const res=wait axios.post(serverPath+“/user/login”{
电邮:电邮,,
密码:密码,
});
这个确实起作用了(电子邮件和密码周围有双引号)

const res=wait axios.post(serverPath+“/user/login”{
“电子邮件”:电子邮件,
“密码”:密码,
});

您确实使用了body parser中间件,对吗?如果您是:如何,确切地说?我正在使用body parser。基本上只需要它,然后“app.use(bodyParser.urlencoded({extended:true}));”当然没有引号。
urlencoded()
不处理
应用程序/json
()。非常感谢@robertklep添加bodyParser.json()修复了。不敢相信我忘记了……非常感谢这一切。非常感谢!!不敢相信我忘记了。谢谢!不知道为什么,但当我尝试
app.use(bodyParser.json());
阅读你的评论后,它起了作用,尽管我以前尝试过很多次。一定是一个神奇的答案;)我仍然有一个空的身体,尽管这两行被包括在内。不知道为什么。我已经做了你们建议的所有事情,但没有任何效果。我想知道为什么会发生这种错误?请回答好!你在告诉我一个f(*&#@@(除非我扩展它,否则web框架不允许我访问通过POST传递的数据?!我想知道为什么主体解析器只在输入中使用“name”属性,而不仅仅是“id”属性。这个答案对我帮助很大,有时我们只是忘记了这些基本的东西。Ps:在.NET中,我从未在输入字段中使用名称,所以这对我来说很不寻常。对于JavaScript,
{“email”:email,“password”:password}
{email:email,password:password}相同
我同意你的看法,但无论出于什么原因,当axios解析此文件时,结果是一个有效,另一个无效。我没有任何解释-只是在邮件中发布,甚至可以节省一些时间。