【发布时间】:2021-05-25 18:37:20
【问题描述】:
为什么我无法接收在 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 字符串,它就可以正常工作。
【问题讨论】:
-
req.body是什么?也许util.inspect()函数不适用于字符串。 -
我还使用了没有 util.inspect() 的 console.log(req.body),并尝试了 JSON.stringify(req.body),无论我怎么看,结果都是空的。
typeof(req.body)是Object。 -
看这里,由 TJ 自己回答:stackoverflow.com/a/12497793/2083599 - 这不是最佳的做法,但总比没有好...
-
非常感谢 - 我没有找到这个,因为我认为问题出在我的 POST 请求上,而不是 Express 无法识别内容类型。
-
Express 无法识别内容类型不是问题。真正的问题是,在你试图看到身体的时候,你还没有收到它。通过即使在 req 上监听数据,您也可以获得它。全部接收完毕后触发结束事件。