当通过NodeJS/Express服务器上的jQuery Ajax调用发送到客户端时,服务器上JS对象上动态创建的属性会

Dynamically created attribute on an JS object on the server disappears when sent to the client via jQuery Ajax call on a NodeJS/Express Server

本文关键字:服务器 JS 客户端 属性 动态 对象 创建 调用 NodeJS Express jQuery      更新时间:2023-09-26

在客户端,我请求通过jQuery Ajax调用某个JS对象。

$.get("/foo/requestData",function(data){
    console.log("Received data is missing added property: ", data);
});

在服务器端,我在DB请求后检索一个带有JS对象的数组。现在,我在该对象上创建了一个新属性,并希望将其发送回客户端:

  exports.requestData = function(req, res, next) {
    db.myDb.findAll({
      where: { bar: true },
      order: [
        ['id']
      ],
      include: [db.table1, db.table2, db.table3, {
        model: db.table4
      }]
    })
    .then(function(originalResultObject) {
      console.log("This is array with original Objects: ", originalResultObject);
      var newResultObject = originalResultObject.map(function(element) {
        var valueForNewProperty = "something new";
        var newProperty = "newProperty";
        element[newProperty] = valueForNewProperty;
        return element;
      });
      console.log("Added property is here: ", newResultObject);
      res.locals.thresholdSummary = newResultObject;
      res.send(newResultObject);
    })

结果我在服务器上:

这是一个具有原始对象的数组:

[实例{dataValues: {foo:"bar1"},

Instance {datvalues:{foo: "bar2"}},

{dataValues: {foo:"bar3&quot实例 ;}}, ....]

添加属性在这里:

[{foo: "bar1", newProperty: "something new"},

{foo: "bar2"; newProperty: ";},

{foo:"bar3"newProperty:"new&quot的东西 ;}, ...]

但是在客户端网站上缺少:

接收到的数据缺失添加属性:

[{foo:"bar1",

{foo:"bar2",

{foo: "bar3"},…]

可能与JS对象到JSON的转换有关。新添加的属性在发送到客户端转换为JSON后被忽略。但是,如何在服务器上持久地添加新属性并将其发送到客户机呢?

BTW:在最上面说"Instance {datvalues:…}"数组的区别是什么?

添加新属性必须添加到originalObject的dataValues属性中,即:

originalObject.dataValues.addedProperty = "something new";

在回调完成之前发送响应。试试这个:

exports.requestData = function(req, res, next) {
db.myDb.findAll({
  where: { bar: true },
  order: [
    ['id']
  ],
  include: [db.table1, db.table2, db.table3, {
    model: db.table4
  }]
})
.then(function(originalResultObject) {
  console.log("This is original Object: ", originalResultObject);
  var newResultObject = originalResultObject.map(function(element) {
    var valueForNewProperty = "something new";
    var newProperty = "newProperty";
    element[newProperty] = valueForNewProperty;
    console.log("Added property is here: ", newResultObject);
    res.locals.thresholdSummary = newResultObject;
    res.send(newResultObject);
    return element;
  });
})
注意,我将res.send向上移动到回调