我想使用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();
});
console.log(JSON.stringify(jsonObj));
->
[{"id":2,"updated_order":1},{"id":3,"updated_order":2},{"id":1,"updated_order":3}]
答案 0 :(得分:0)
编辑:
根据您表单的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
的内容并找到存储数据的属性。