Javascript 当通过NodeJS/Express服务器上的jqueryajax调用发送到客户端时,服务器上JS对象上动态创建的属性将消失
在客户端,我通过jqueryajax请求调用某个JS对象Javascript 当通过NodeJS/Express服务器上的jqueryajax调用发送到客户端时,服务器上JS对象上动态创建的属性将消失,javascript,jquery,ajax,node.js,express,Javascript,Jquery,Ajax,Node.js,Express,在客户端,我通过jqueryajax请求调用某个JS对象 $.get("/foo/requestData",function(data){ console.log("Received data is missing added property: ", data); }); 在服务器端,我在DB请求后检索一个包含JS对象的数组。现在,我在该对象上创建了一个新属性,并希望将其发送回客户端: exports.requestData = funct
$.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”}
实例{dataValues:{foo:“bar2”}
实例{dataValues:{foo:“bar3”},…]
新增属性如下:
[{foo:“bar1”,newProperty:“新事物”}
{foo:“bar2”,newProperty:“新事物”}
{foo:“bar3”,newProperty:“新事物”},…]
但在客户端站点上,它丢失了:
接收到的数据缺少添加的属性:
[{foo:“bar1”}
{foo:“bar2”}
{foo:“bar3”},…]
这可能与将JS对象转换为JSON有关。在发送到客户端时,将新添加的属性转换为JSON后被忽略。但是,如何在服务器上持续添加新属性并将其发送到客户端
顺便说一句:最顶端的数组表示“Instance{dataValues:…}”,这两者之间的区别是什么?您在回调完成之前发送响应。试试这个:
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
向上移动到回调中只添加到新属性必须添加到原始对象的dataValues
属性中,即:
originalObject.dataValues.addedProperty = "something new";
原始结果对象是什么类型的数据?它是一个对象数组吗?它是数据库中的某个自定义对象吗?您的
console.log()
语句使它看起来像是在对普通对象调用.map()
,并期望它返回另一个普通对象。这很令人困惑。通常,会对数组调用.map()
,但不会在任何地方显示数组。@jfriend00 yes originalResultObject是一个对象数组,即“元素”。在这些元素上,我添加了一个新属性,希望在客户端读取该属性。命名确实令人困惑。这不是回调函数,而是映射函数。但是谢谢。也许我必须用promise all解析带有原始对象的数组。