有类似的SO问题,但我找不到这个问题的准确答案。
我需要不时地将一些文本从客户端推回到服务器端。用户方不期望来自服务器端的答复。我虽然会使用POST如下:
var request = new XMLHttpRequest();
request.open('POST', MY_URL, true);
request.setRequestHeader('Content-Type', 'text/html;charset=utf-8');
request.send(myMsg);
从Chrome中,我可以看到标头和有效负载是正确的。状态为200 OK。
在服务器端,我尝试检索正文内容,如下所示:
function myFunction(req, res) {
console.log("Reached myFunction, reqBody is: '" + req.body + "'");
res.end();
}
但我明白了:
Reached myFunction, reqBody is: 'undefined'
我做错了什么?我应该使用带有JSON的'application/json; charset=utf-8'
吗?
更新
我一直在做更多的研究,服务器端的req
对象没有body
属性。但是,headers
没问题。
我使用以下内容启动我的申请:
var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
...
self.app = express();
...
self.app.use(bodyParser());
self.app.use(cookieParser());
有什么想法吗?
答案 0 :(得分:4)
使用body-parser
中间件时,内容类型匹配很重要。在这种情况下,您已指定text/html
,因此您应该使用bodyParser.text()
中间件。此外,您需要将text/html
指定为type
。所以一个完整的例子如下:
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.text({
type: "text/html"
}));
app.post("/test", function(req, res) {
console.log(req.body);
res.end();
});
app.listen(3000);
您还可以使用通配符(例如type: "text/*"
)作为bodyParser.text()
的选项。
当我使用你的例子运行时,我看到"嗨"我点击/测试时输出到控制台。
答案 1 :(得分:0)
尝试:
request.setRequestHeader('Content-Type', "application/x-www-form-urlencoded");
这可能有所帮助。