我想使用NodeJ和Handlebars中的JSON对象值更新MySQL数据库。我已经成功创建了JSON。该JSON仅包含id
和updated_order
。现在,我必须使用updated_order
值,并使用where子句的id
值对其进行更新。
但是尝试这样做时出现错误。
500个内部错误upOrders不可迭代
按钮->
<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();
});
[C0的输出->
console.log(JSON.stringify(jsonObj));
编辑:根据表单的HTML,我可以看到您没有ID为[{"id":2,"updated_order":1},{"id":3,"updated_order":2},{"id":1,"updated_order":3}]
的输入,因此您的数据没有被附加,因此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())
不可迭代。这是因为您将表单元素的值设置为JSON字符串:
req.body.data
因此,最有可能$('#upOrders').val(xxx.getUpdateOrderJson());
具有一个名为“ upOrders”的属性(或“ #upOrders”元素的任何“ name”属性),然后您需要在以下位置调用req.body
:
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
的内容并找到存储数据的属性。