使用Node.js和Express发布时如何访问请求体?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (74)

我有以下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();
});

现在,如果我发布如下内容:

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

Someone按预期得到。现在,如果我想获得完整的请求体呢?我试图做response.write(request.body),但Node.js的抛出一个异常说:“ 第一个参数必须是一个字符串或缓冲区 ”,然后变为“无限循环”与说“异常发送之后无法设置头。 ” 即使我做了var reqBody = request.body;,然后写作也是如此response.write(reqBody)

这里有什么问题?

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

提问于
用户回答回答于

Express 4.0及以上版本:

$ npm install --save body-parser

然后在你的节点应用程序中:

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

Express 3.0及以下版本:

尝试在你的cURL调用中传递它:

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

并确保数据采用JSON格式:

{"user":"someone"}

此外,可以在node.js代码中使用console.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);

如果不想使用bodyParser,请查看以下其他问题:https ://stackoverflow.com/a/9920700/446681

用户回答回答于

从Express 4开始,下面的代码看起来有效。请注意,需要body-parser使用安装npm

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
});

扫码关注云+社区

领取腾讯云代金券