Ajax将表单数据的请求发布到节点/表达式

时间:2019-04-11 16:09:09

标签: javascript node.js ajax express

感谢您阅读。
我试图得到一个简单的示例,将数据发布到节点/ Express Server。帖子从ajax代码执行,然后express查看请求,我可以从express返回响应到ajax代码。因此,路径有效。我不知道的是如何在邮寄请求中传递数据并以快递方式进行解析。

在快递方面,我有一条日志声明:

   console.log("Body: " + req);

它只是告诉我:

   Body: [object Object]

因此,我或者没有在发布请求中正确设置数据,或者我没有试图正确解码数据。

那是一个问题。我遇到的另一个问题是,当我发表帖子时,我还看到了一个快递请求。

我搜索并搜索了数十个(即使不是数百个)帖子,只是无法弄清发生了什么。在这一点上,我有点束手无策,已经改变了很多东西,我什至不知道自己是否会再关门。

为了简化操作(也许),我只是尝试在ajax代码中对某些数据进行硬编码,而不使用实际表单中的数据。

    <form id="productKeyForm">
        <div id="keyInput">
            <fieldset>
                <input type="number" id="productKey" name="productKey" />
                <button id="getPrdKey">Submit</button>
            </fieldset>
        </div>
    </form>

    <script>
        $("#getPrdKey").click(function () {
            console.log("ajax submit form entered, key: " + jQuery("#productKey").val());
            var data = {};
            data.title = "title";
            data.msg = "msg";
            $.ajax({
                url: "/submit-form",
                type: "POST",
                //                contentType: 'application/json',
                //                dataType: "json",
                data: JSON.stringify(data),
                success: function (data) {
                    console.log("succes returned in ajax");
                },
                error: function (a, b, c) {
                    console.log("post resulted in failure");
                }

            });
        });
    </script>

表达方面:

var express = require("express");
var bodyParser = require("body-parser");

var app = express();    
app.use(bodyParser.json());

app.use(function (req, res, next) {
    console.log(req.method + " request for " + req.url);
    next();
    });

app.use(express.static("./"));  // filesystem???

app.post("/submit-form", function (req, res) {
    console.log("Body: " + req);
    res.send("9999");
});
app.listen(80);

以下是我运行并在表单字段中输入12345时看到的console.log

Listen on port 80

GET request for /

GET request for /css/styles.css

POST request for /submit-form

Body: [object Object]

GET request for /?productKey=12345

GET request for /css/styles.css

因此,即使我的“帖子”仅使用硬编码数据而不是表单数据,我仍然会收到输入的表单数据的“ GET”请求。而发布数据只是显示为[object Object]。

意识到我在这篇文章中问了两个问题。一个关于发布数据,另一个关于我没想到的额外的“ GET”。是否应该将其作为两个不同的问题提出?

1 个答案:

答案 0 :(得分:-1)

  1. [Object object]Object.toString()对象上req方法的结果,因为您已在此处将它与字符串连接在一起:console.log("Body: " + req)

是否将对象字符串化以打印它:

console.log( "Body: " + JSON.stringify(req, null, 2) );

或仅使用逗号(控制台将评估值并用space分隔em:

console.log("Body: ", req );

req.body是您的POST请求的正文:

 console.log("Body: ", req.body );
  1. 您有一个额外的GET请求,因为这是浏览器的默认行为,即单击submit按钮时提交表单。如果您想自己处理表单提交(已完成此操作),则首先应阻止表单提交,然后对其进行自定义:

    $("#getPrdKey").click(function (e) {
      // prevent form submission
      e.preventDefault();
      // custom submit
      console.log("ajax submit form entered, key: " + jQuery("#productKey").val());
      var data = {};
      ...
    });