JSON 对象值传递给 NodeJS 服务器端
JSON object value pass to NodeJS server-side
我想使用 NodeJs 和 Handlebars 中的 JSON 对象值更新 MySQL 数据库。我已经成功创建了 JSON。 JSON 仅包括 id
和 updated_order
。现在我必须使用 updated_order
值并使用 where 子句的 id
值更新它。
但是我在尝试此操作时遇到错误。
500 Internal Error upOrders is not iterable
按钮 -->
<form id="skuFormorders" method="post" action="/productorder">
<button id="update_order" type="submit" class="btn btn-outline-success btn-sm" style="background-color:white" onclick="xxx.prepUpdateOrder();">Yes</button>
</form>
在products.handlebars中创建一个JSON对象-->
xxx.getUpdateOrderJson = function(){
var jsonObj = [];
var id = '';
var existing_order = '';
var updated_order= '';
var updated_row='';
jQuery("table tbody tr").each(function (index, value) {
id = $(value).find('.orderid').data("value");
existing_order = $(value).find('.exsorder').data("value");
updated_order = (index+1);
updated_row = {}
if(existing_order != updated_order){
updated_row ["id"] = id;
updated_row ["updated_order"] = updated_order;
jsonObj.push(updated_row);
}
});
console.log(JSON.stringify(jsonObj));
return JSON.stringify(jsonObj);
};
xxx.prepUpdateOrder = async function (e) {
$('#upOrders').val(xxx.getUpdateOrderJson());
document.getElementById('skuFormorders').submit();
});
console.log(JSON.stringify(jsonObj));
的输出 ->
[{"id":2,"updated_order":1},{"id":3,"updated_order":2},{"id":1,"updated_order":3}]
编辑:
根据您的表单 HTML,我可以看到您没有 ID 为 upOrders
的输入,因此您的数据未被附加,因此 req.body
为 {}
(空对象)。
向表单添加输入,以便您的 jQuery 可以将更新后的订单附加到提交的数据中:
<form id="skuFormorders" method="post" action="/productorder">
<input type="hidden" id="upOrders" name="upOrders" />
<button id="update_order" type="submit" class="btn btn-outline-success btn-sm" style="background-color:white" onclick="xxx.prepUpdateOrder();">Yes</button>
</form>
首先,确保您使用 body-parser
中间件让您的服务器处理表单提交。 https://github.com/expressjs/body-parser
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
你的错误是说 req.body.data
不可迭代。这是因为您将表单元素的值设置为 JSON 字符串:
$('#upOrders').val(xxx.getUpdateOrderJson());
因此,很可能 req.body
有一个名为 "upOrders" 的 属性(或者“#upOrders”元素的任何 "name" 属性)需要在
上致电 JSON.parse
let upOrders = null;
if(req.body.upOrders) {
upOrders = JSON.stringify(req.body.upOrders);
} else {
throw new Error('Request is missing "upOrders"');
}
这对您如何将表单数据发送到服务器以及您的服务器如何处理数据做出了很多假设。要获得您需要调用 JSON.parse
的确切属性,您应该检查 req.body
的内容并找到存储数据的 属性。
我想使用 NodeJs 和 Handlebars 中的 JSON 对象值更新 MySQL 数据库。我已经成功创建了 JSON。 JSON 仅包括 id
和 updated_order
。现在我必须使用 updated_order
值并使用 where 子句的 id
值更新它。
但是我在尝试此操作时遇到错误。
500 Internal Error upOrders is not iterable
按钮 -->
<form id="skuFormorders" method="post" action="/productorder">
<button id="update_order" type="submit" class="btn btn-outline-success btn-sm" style="background-color:white" onclick="xxx.prepUpdateOrder();">Yes</button>
</form>
在products.handlebars中创建一个JSON对象-->
xxx.getUpdateOrderJson = function(){
var jsonObj = [];
var id = '';
var existing_order = '';
var updated_order= '';
var updated_row='';
jQuery("table tbody tr").each(function (index, value) {
id = $(value).find('.orderid').data("value");
existing_order = $(value).find('.exsorder').data("value");
updated_order = (index+1);
updated_row = {}
if(existing_order != updated_order){
updated_row ["id"] = id;
updated_row ["updated_order"] = updated_order;
jsonObj.push(updated_row);
}
});
console.log(JSON.stringify(jsonObj));
return JSON.stringify(jsonObj);
};
xxx.prepUpdateOrder = async function (e) {
$('#upOrders').val(xxx.getUpdateOrderJson());
document.getElementById('skuFormorders').submit();
});
console.log(JSON.stringify(jsonObj));
的输出 ->
[{"id":2,"updated_order":1},{"id":3,"updated_order":2},{"id":1,"updated_order":3}]
编辑:
根据您的表单 HTML,我可以看到您没有 ID 为 upOrders
的输入,因此您的数据未被附加,因此 req.body
为 {}
(空对象)。
向表单添加输入,以便您的 jQuery 可以将更新后的订单附加到提交的数据中:
<form id="skuFormorders" method="post" action="/productorder">
<input type="hidden" id="upOrders" name="upOrders" />
<button id="update_order" type="submit" class="btn btn-outline-success btn-sm" style="background-color:white" onclick="xxx.prepUpdateOrder();">Yes</button>
</form>
首先,确保您使用 body-parser
中间件让您的服务器处理表单提交。 https://github.com/expressjs/body-parser
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
你的错误是说 req.body.data
不可迭代。这是因为您将表单元素的值设置为 JSON 字符串:
$('#upOrders').val(xxx.getUpdateOrderJson());
因此,很可能 req.body
有一个名为 "upOrders" 的 属性(或者“#upOrders”元素的任何 "name" 属性)需要在
JSON.parse
let upOrders = null;
if(req.body.upOrders) {
upOrders = JSON.stringify(req.body.upOrders);
} else {
throw new Error('Request is missing "upOrders"');
}
这对您如何将表单数据发送到服务器以及您的服务器如何处理数据做出了很多假设。要获得您需要调用 JSON.parse
的确切属性,您应该检查 req.body
的内容并找到存储数据的 属性。