清空req.body接收对node.js的text / plain POST请求

时间:2013-07-22 17:06:03

标签: node.js http post

为什么我不能收到POST请求正文中发送的纯文本?

从客户端浏览器发出的请求:

var xhr = new XMLHttpRequest();
xhr.open("POST", "/MyRoute/MySubRoute");
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
xhr.send("hello!");    

将Express用于我的节点服务器:

app.post('/MyRoute/MySubRoute', function(req, res) {
    console.log("Received:"+require('util').inspect(req.body,{depth:null});
    res.send();
});

登录到我得到的控制台:

Received:{}

我尝试了text/plain(没有字符集),结果相同。如果我将我的内容类型更改为application/json并传递一个简单的JSON字符串,则可以正常工作。

2 个答案:

答案 0 :(得分:12)

总结以上回答问题的评论:

  • 客户端的XMLHttpRequest是正确的
  • 在服务器端,Express使用connect's bodyParser,默认情况下仅支持以下内容类型:
    • 应用/ JSON
    • 应用程序/ x-WWW窗体-urlencoded
    • 的multipart / form-data的
  • 由于Express未实现 text / plain 的内容类型,因此在调用 app / post 之前,没有办法等待接收正文路由。
  • 解决方法是将 text / plain 内容类型添加到Express,如所述here

答案 1 :(得分:2)

添加

app.use(express.text())

您可以阅读更多相关信息here