所以我在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。
如何获取请求的实际主体?
提前致谢。
答案 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,
});