无法从POST请求检索JSON数据

时间:2019-09-07 11:01:49

标签: javascript node.js xmlhttprequest

我正在制作一个简单的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);
});

3 个答案:

答案 0 :(得分:2)

contentType替换为Content-Type。希望对您有帮助

答案 1 :(得分:2)

您需要将contentType更改为Content-Type

Mozilla Content-Type Docs

答案 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>