当通过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
在客户端,我请求通过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"实例 ;}}, ....]
添加属性在这里:
[{foo: "bar1", newProperty: "something new"},
{foo: "bar2"; newProperty: ";},
{foo:"bar3"newProperty:"new"的东西 ;}, ...]
但是在客户端网站上缺少:
接收到的数据缺失添加属性:
[{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
向上移动到回调
相关文章:
- 使用node.js服务器中的evernote api获取note内容
- 使用JS在服务器上运行PHP脚本
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 什么's本地node.js服务器和python简单http服务器之间的区别
- renderReact/Rect Router+Node/Express.js的服务器端/同构渲染中未定义renderP
- 在HTML页面上显示node.js服务器中的数据
- 正在使用Dropzone.js删除服务器上已重命名的文件
- Angular JS文件上传到托管服务器
- node.js将字符串转换为要上传到Web服务器的文件
- 将用户制作的SVG(raphael.js)发送到服务器(php),以便通过电子邮件发送
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- 将服务器js文件替换为本地js进行调试
- 如何从URL隐藏内容,但仍需要在node中发送到服务器.js并表达
- 节点中的 Web 服务器.js路径中的错误
- 运行 react/redux 应用程序所需的最低服务器.js
- 节点.js我做错了哪一部分?服务器.js正在运行,但我看不到 HTML 页面
- Node.js/MongoDB:如何使用module.exports将本地主机数据库URL传递给服务器.js文件
- 如何将值从辅助函数返回给服务器.js NodeJS
- 当新行从应用程序插入到mysql表时,监听来自节点服务器js的事件
- 评估服务器js文件的危险