我正在尝试使用XMLHttpRequest发送到快速服务器的发布请求中访问正文。但是请求的内容为空,我似乎无法理解为什么会这样。
我在express应用程序中包含了一个正文解析器,并且我尝试从SO答案中复制一些代码。但是我仍然以某种方式弄错了。
<script>
const Http = new XMLHttpRequest();
Http.open('post', 'localhost:3000');
Http.send("sending something!");// this resolves to {} on the backend?
Http.onload = function() {
alert(Http.response);
};
</script>
这就是我尝试在快递服务器上处理它的方式
const express = require("express");
let app = express()
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({
extended: true
}));
app.post("/post", (req, res) => {
console.log("inside of post");
console.log(req.body);
})
app.listen(3000)
这是日志
inside of post
{}
我希望console.log()
打印“正在发送东西!”我尝试与Http.send("sending something!");
一起发送请求。
答案 0 :(得分:2)
您已指定body-parser
来将正文解析为url编码格式,如果您传递这样的数据,该格式将起作用:
Http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Http.send("param1=value1¶m2=value2");
/* console output:
{ param1: 'value1', param2: 'value2' }
*/
在您的情况下,要传递的数据是简单的字符串,由于无法解析,后端会将其解释为空的JSON {}
。
要使其正常工作,请尝试如下设置数据格式
<script>
const Http = new XMLHttpRequest();
Http.open('post', 'localhost:3000');
Http.setRequestHeader("Content-Type", "text/plain");
Http.send("sending something!");
Http.onload = function() {
alert(Http.response);
};
</script>
在快递服务器中:
const express = require("express");
let app = express();
const bodyParser = require("body-parser");
// app.use(
// bodyParser.urlencoded({
// extended: true
// })
// );
app.use(bodyParser.text({ type: "text/plain" })); // use this instead
app.post("/post", (req, res) => {
console.log("inside of post");
console.log(req.body);
return req.body;
});
app.listen(3000);
然后,您也许可以在后端阅读消息"sending something!"
。
只需确保在发送时在XMLHttpRequest
中设置正确的contentType标头,并且在后端解析时也使用相同的类型。
有关bodyParsers的更多信息,请参阅此doc