11

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

4

2 回答 2

18

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

  • 客户端的 XMLHttpRequest 是正确的
  • 在服务器端,Express 使用connect 的 bodyParser,默认情况下只支持以下内容类型:
    • 应用程序/json
    • 应用程序/x-www-form-urlencoded
    • 多部分/表单数据
  • 因为text/plain的 content-type 不是 Express 实现的,所以在调用app/post路由之前没有方法等待 body 接收到。
  • 解决方案是将text/plain内容类型添加到 Express 中,如此处所述
于 2013-07-25T16:14:43.003 回答
3

添加

app.use(express.text())

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

于 2021-02-19T00:24:22.240 回答