感谢您阅读。
我试图得到一个简单的示例,将数据发布到节点/ 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”。是否应该将其作为两个不同的问题提出?
答案 0 :(得分:-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 );
您有一个额外的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 = {};
...
});