我有以下Node.js代码:

var express = require('express');
var app = express.createServer(express.logger());
app.use(express.bodyParser());

app.post('/', function(request, response) {
    response.write(request.body.user);
    response.end();
});

现在如果我POST一些东西:

curl -d user=Someone -H Accept:application/json --url http://localhost:5000

我得到了某人。现在,如果我想要得到完整的请求体呢?我试着做response.write(request.body),但Node.js抛出一个异常,说“第一个参数必须是一个字符串或Buffer”,然后进入一个“无限循环”,异常说“发送后不能设置标头”;这也是真的,即使我做var reqBody = request.body;然后写入response.write(reqBody)。

这里的问题是什么?

另外,我可以只得到原始请求而不使用express.bodyParser()吗?


当前回答

Express 4.0及以上:

$ NPM install——保存body-parser

然后在你的节点应用中

const bodyParser = require('body-parser');
app.use(bodyParser);

Express 3.0及以下:

尝试在cURL调用中传递这个:

——header "Content-Type: application/json"

确保你的数据是JSON格式:

{“用户”:“有人”}

另外,你也可以使用控制台。在node.js代码中使用Dir查看对象内部的数据,如下例所示:

var express = require('express');
var app = express.createServer();

app.use(express.bodyParser());

app.post('/', function(req, res){
    console.dir(req.body);
    res.send("test");
}); 

app.listen(3000);

另一个问题可能也有帮助:如何在express node.js POST请求中接收JSON ?

如果您不想使用bodyParser,请查看另一个问题:https://stackoverflow.com/a/9920700/446681

其他回答

您使用以下代码来记录post数据:

router.post("/users",function(req,res){
    res.send(JSON.stringify(req.body, null, 4));
});

从Express 4开始,下面的代码就可以完成这个任务。 注意,你需要使用npm安装body-parser。

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));


app.listen(8888);

app.post('/update', function(req, res) {
    console.log(req.body); // the posted data
});

试试这个:

response.write(JSON.stringify(request.body));

这将获取bodyParser为您创建的对象并将其转换回字符串并将其写入响应。如果你想要确切的请求体(具有相同的空格等),你需要在请求之前将数据和结束侦听器附加到请求上,并逐块构建字符串,就像你在来自connect的json解析源代码中看到的那样。

Express 4.0及以上:

$ NPM install——保存body-parser

然后在你的节点应用中

const bodyParser = require('body-parser');
app.use(bodyParser);

Express 3.0及以下:

尝试在cURL调用中传递这个:

——header "Content-Type: application/json"

确保你的数据是JSON格式:

{“用户”:“有人”}

另外,你也可以使用控制台。在node.js代码中使用Dir查看对象内部的数据,如下例所示:

var express = require('express');
var app = express.createServer();

app.use(express.bodyParser());

app.post('/', function(req, res){
    console.dir(req.body);
    res.send("test");
}); 

app.listen(3000);

另一个问题可能也有帮助:如何在express node.js POST请求中接收JSON ?

如果您不想使用bodyParser,请查看另一个问题:https://stackoverflow.com/a/9920700/446681

2019年,你不需要安装body解析器。

你可以使用:

var express = require('express');
var app = express();
app.use(express.json())
app.use(express.urlencoded({extended: true}))
app.listen(8888);
app.post('/update', function(req, res) {
    console.log(req.body); // the posted data
});