我正在制作一个简单的Node.js Web服务器,但在向服务器发送请求时遇到了麻烦。这是一个带有简单html“ form”的示例。我发送了一个字符串化的JSON数据,但是req.body
为空。
HTML:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="utf-8">
</head>
<body>
<input type="text" id="field" value="foo">
<button type="button" id="button">bar</button>
<script>
addElement = function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/database');
xhr.setRequestHeader('contentType', 'application/json; charset=utf-8');
var newElem = new Object();
newElem.name = field.value || "";
var requestData = JSON.stringify(newElem);
console.log(newElem);
// {name: "foo"}
xhr.send(requestData);
}
button.onclick = addElement;
</script>
</body>
</html>
节点服务器代码:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var PORT = process.env.PORT || 3000;
app.use(bodyParser.json());
app.get("/", function(req,res){
res.sendFile(__dirname +"/index.html");
});
app.post('/database', function(req, res) {
console.log("req.body = ", req.body);
//expected output: req.body = ({name: foo})
//actual output: req.body = ()
});
app.listen(PORT, function() {
console.log('Server listening on ' + PORT);
});
答案 0 :(得分:2)
将contentType
替换为Content-Type
。希望对您有帮助
答案 1 :(得分:2)
您需要将contentType
更改为Content-Type
。
答案 2 :(得分:0)
如果要将请求发送到服务器。首先,您需要添加服务器网址。
例如
如果您的服务器应用程序以3000运行,则表示您更改
xhr.open('POST','/ database');到xhr.open('POST','http://localhost:3000/database');
以下代码具有:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="utf-8">
</head>
<body>
<input type="text" id="field" value="foo">
<button type="button" id="button">bar</button>
<script>
addElement = function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:3000/database');
xhr.setRequestHeader('contentType', 'application/json; charset=utf-8');
var newElem = new Object();
newElem.name = field.value || "";
var requestData = JSON.stringify(newElem);
console.log(newElem);
// {name: "foo"}
xhr.send(requestData);
}
button.onclick = addElement;
</script>
</body>
</html>