无法使用NodeJS / ExpressJS和Postman获取POST数据

时间:2017-01-31 10:25:01

标签: node.js express postman body-parser

这是我服务器的代码:

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属性始终为空。

我错过了什么吗?enter image description here

4 个答案:

答案 0 :(得分:16)

添加请求的编码。这是一个例子

$where

然后在邮递员中选择.. app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); .. 或将内容类型设置为x-www-form-urlencoded并选择application/json

编辑以使用原始

原始

raw

接头

{
  "foo": "bar"
}

编辑#2 回答聊天中的问题:

  1. 为什么它不能使用表单数据?
  2. 你确定可以,只看这个答案How to handle FormData from express 4

    1. 使用Content-Type: application/json x-www-form-urlencoded
    2. 之间的区别

      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结果:

Sample Json and result of the json

设置Content-typeL应用程序/ JSON:

Set Content-type: application/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());