node.js服务器:HTTP POST主体为空

时间:2015-06-23 23:36:50

标签: node.js http post

我将来自wi-fi连接的arduino设备(cc3000)的信息发送到运行express / node的AWS服务器。我计划最终将端点挂钩到SQS作为生产者,但是现在我只是想让POST请求起作用。问题是,我在我的AWS上安全shell,并且当我看到发布请求流时,正文部分是空的。但是,标题存在,因为我发送它们。我的问题是,数据在哪里?这是格式化问题还是AWS的错误?

POST请求的原始主体(我现在只使用普通/文本来查看是否可以使其工作):

POST /postdata/ HTTP/1.1
Host: *******************
User-Agent: Arduino/0.6.0
Accept: plain/text
Content-Length: 36
Content-Type: plain/text

{"temperature_c": "29.80"}

同样,标头位于JSON有效负载中,但不是“温度”部分。

这是端点:

  app.post('/postdata', function (req, res) {
    Sensor_data.create(req.body);
    console.log(req.body);
 });

标题存在。这是为了写入mongoDB。如果我从命令行执行cURL请求,它会成功写入。例如,这有效:

curl -v *************** -d "{temp_f=28.40&relative_humidity=45.40"

因此,如果标题存在,我知道我已经成功地向服务器写了一些内容。哎呀是数据?这是格式化问题还是AWS的错误?

## EDIT ########:

我仔细检查以确保设置了body-parser。我已经在我的server.js中安装了中间件:

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

然而,又出现了另一个问题。我在这条路线中有一些代码可以帮助我通过登录到控制台来查看正在发生的事情。我将POST请求更改为application / json并知道它正在解析,因为我有一个小错字,我必须修复。但是,一旦它开始正确解析,没有任何内容记录到控制台,也没有写入mongoDB。知道那里发生了什么吗?如果实际上正在解析JSON,那么它在服务器上的接收位置是什么?

2 个答案:

答案 0 :(得分:2)

此问题已通过将app.use(bodyParser.urlencoded({ extended: false }));设置为使用true进行初始化并使用AcceptContent-Type创建application/x-www-form-urlencoded的帖子请求来解决。希望这篇文章可以帮助一些人,因为我已经看过很多人在这个问题上苦苦挣扎

答案 1 :(得分:1)

您是否已设置适当的中间件来进行解析并不清楚。您将找到文档here - 在第一个示例中,您需要json解析器,而在第二个示例中,您需要urlencoded(尽管出现了{成为一个额外的领先者application/json - 也许是一个错字?)。

  

我现在只是使用普通/文本来查看我是否可以使用它

那不行。 json解析中间件决定是否尝试根据内容类型进行解析 - 如果你不诚实,它不知道它应该尝试解析。如果您要发送JSON正文,请使用<br />

相关问题