这是我服务器的代码:
var express = require('express');
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.json());
app.post("/", function(req, res) {
res.send(req.body);
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
从Postman,我向http://localhost:3000/发起POST请求,在Body / form-data中我有一个键" foo"和价值" bar"。
但是我在响应中不断得到一个空对象。 req.body
属性始终为空。
答案 0 :(得分:16)
添加请求的编码。这是一个例子
$where
然后在邮递员中选择..
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
..
或将内容类型设置为x-www-form-urlencoded
并选择application/json
编辑以使用原始
原始
raw
接头
{
"foo": "bar"
}
编辑#2 回答聊天中的问题:
你确定可以,只看这个答案How to handle FormData from express 4
Content-Type: application/json
和x-www-form-urlencoded
differences in application/json and application/x-www-form-urlencoded
答案 1 :(得分:0)
let express = require('express');
let app = express();
// For POST-Support
let bodyParser = require('body-parser');
let multer = require('multer');
let upload = multer();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/api/sayHello', upload.array(), (request, response) => {
let a = request.body.a;
let b = request.body.b;
let c = parseInt(a) + parseInt(b);
response.send('Result : '+c);
console.log('Result : '+c);
});
app.listen(3000);
示例JSON和JSON结果:
设置Content-typeL应用程序/ JSON:
答案 2 :(得分:0)
我在使用路由器时遇到此问题。只有GET起作用,POST,PATCH和delete反映了req.body的“未定义”。在路由器文件中使用主体解析器之后,我能够使所有HTTP方法正常工作...
这是我的做法:
...
const bodyParser = require('body-parser')
...
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
...
...
// for post
router.post('/users', async (req, res) => {
const user = await new User(req.body) // here is where I was getting req.body as undefined before using body-parser
user.save().then(() => {
res.status(201).send(user)
}).catch((error) => {
res.status(400).send(error)
})
})
对于PATCH和DELETE而言,user568109建议的技巧也有效。
答案 3 :(得分:0)
我想补充一点的是,是否通过Express.js生成器创建了项目 在您的app.js中,它还会生成以下代码
app.use(express.json());
如果将body-parser放在此代码上方,则req.body将返回null或未定义 您应该将其放在上面的代码下面,以确保正确放置
app.use(express.json());
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());