繁体   English   中英

空 req.body 接收文本/纯 POST 请求到 node.js

[英]Empty req.body receiving text/plain POST request to node.js

为什么我无法接收在 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 字符串,它就可以正常工作。

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

  • 客户端的 XMLHttpRequest 正确
  • 在服务器端,Express 使用connect 的 bodyParser ,默认情况下它只支持以下内容类型:
    • 应用程序/json
    • 应用程序/x-www-form-urlencoded
    • 多部分/表单数据
  • 因为text/plain的content-type不是Express实现的,所以没有办法等待body接收到后再调用app/post路由。
  • 该解决方案是将文本/纯内容类型添加到Express作为描述在这里

添加

app.use(express.text())

你可以在这里阅读更多关于它的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM