JSON对象值传递给NodeJS服务器端

时间:2020-04-06 15:43:57

标签: javascript node.js json handlebars.js

我想使用NodeJ和Handlebars中的JSON对象值更新MySQL数据库。我已经成功创建了JSON。该JSON仅包含idupdated_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}]

1 个答案:

答案 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的内容并找到存储数据的属性。