我有以下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)但没做.js抛出一个名为"first argument must be a string or Buffer"的异常,然后进入一个名为"Can't set headers after they are sent."的异常的"无限循环";这也是事实,即使我做了var reqBody = request.body;,然后写了response.write(reqBody).

这里有什么问题?

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

推荐答案

Express 4.0及以上版本:

$ npm install --save body-parser

然后在您的 node 应用程序中:

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

Express 3.0及以下版本:

try 在你的cURL通话中传递:

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

并确保您的数据为JSON格式:

{"user":"someone"}

此外,您还可以使用控制台.在你的 node 中.js代码以查看对象内的数据,如下例所示:

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

另一个问题可能也有帮助:How to receive JSON in express node.js POST request?

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

Javascript相关问答推荐

Vue v模型检测父参考更改

Node.JS ws包中是否有Webocket的错误代码列表?

追踪执行顺序

响应式JS DataTable中的Bootstrap 5弹出程序无法正常工作

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

为什么getRecord()会因为与_logger相关的错误而失败?(使用Hedera SDK)

如何使用Echart 5.5.0创建箱形图

具有相同参数的JS类

仅圆角的甜甜圈图表

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

无法检测卡片重叠状态的问题

实现JS代码更改CSS元素

如何在Angular拖放组件中同步数组?

如何在 Select 文本时停止Click事件?

Reaction组件在本应被设置隐藏时仍显示

按下单键和多值

如何确保预订系统跨不同时区的日期时间处理一致?

未捕获语法错误:Hello World中的令牌无效或意外

使用Reaction窗体挂钩注册日历组件

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作