我对javascript并不太熟悉,而且令人赞叹,因为我无法向使用ORM名称Sequelize.js从数据库中获取的对象添加新属性。
为了避免这种情况,我使用此技巧:
db.Sensors.findAll({
where: {
nodeid: node.nodeid
}
}).success(function (sensors) {
var nodedata = JSON.parse(JSON.stringify(node)); // this is my trick
nodedata.sensors = sensors;
nodesensors.push(nodedata);
response.json(nodesensors);
});
因此,通常如何向对象添加新属性。
如果有帮助,我使用sequelize-postgres版本2.0.x。
更新。 console.log(节点):
{ dataValues:
{ nodeid: 'NodeId',
name: 'NameHere',
altname: 'Test9',
longname: '',
latitude: 30,
longitude: -10,
networkid: 'NetworkId',
farmid: '5',
lastheard: Mon Dec 09 2013 04:04:40 GMT+0300 (FET),
id: 9,
createdAt: Tue Dec 03 2013 01:29:09 GMT+0300 (FET),
updatedAt: Sun Feb 23 2014 01:07:14 GMT+0300 (FET) },
__options:
{ timestamps: true,
createdAt: 'createdAt',
updatedAt: 'updatedAt',
deletedAt: 'deletedAt',
touchedAt: 'touchedAt',
instanceMethods: {},
classMethods: {},
validate: {},
freezeTableName: false,
underscored: false,
syncOnAssociation: true,
paranoid: false,
whereCollection: { farmid: 5, networkid: 'NetworkId' },
schema: null,
schemaDelimiter: '',
language: 'en',
defaultScope: null,
scopes: null,
hooks: { beforeCreate: [], afterCreate: [] },
omitNull: false,
hasPrimaryKeys: false },
hasPrimaryKeys: false,
selectedValues:
{ nodeid: 'NodeId',
name: 'NameHere',
longname: '',
latitude: 30,
longitude: -110,
networkid: 'NetworkId',
farmid: '5',
lastheard: Mon Dec 09 2013 04:04:40 GMT+0300 (FET),
id: 9,
createdAt: Tue Dec 03 2013 01:29:09 GMT+0300 (FET),
updatedAt: Sun Feb 23 2014 01:07:14 GMT+0300 (FET),
altname: 'Test9' },
__eagerlyLoadedAssociations: [],
isDirty: false,
isNewRecord: false,
daoFactoryName: 'Nodes',
daoFactory:
{ options:
{ timestamps: true,
createdAt: 'createdAt',
updatedAt: 'updatedAt',
deletedAt: 'deletedAt',
touchedAt: 'touchedAt',
instanceMethods: {},
classMethods: {},
validate: {},
freezeTableName: false,
underscored: false,
syncOnAssociation: true,
paranoid: false,
whereCollection: [Object],
schema: null,
schemaDelimiter: '',
language: 'en',
defaultScope: null,
scopes: null,
hooks: [Object],
omitNull: false,
hasPrimaryKeys: false },
name: 'Nodes',
tableName: 'Nodes',
rawAttributes:
{ nodeid: [Object],
name: [Object],
altname: [Object],
longname: [Object],
latitude: [Object],
longitude: [Object],
networkid: [Object],
farmid: [Object],
lastheard: [Object],
id: [Object],
createdAt: [Object],
updatedAt: [Object] },
daoFactoryManager: { daos: [Object], sequelize: [Object] },
associations: {},
scopeObj: {},
primaryKeys: {},
primaryKeyCount: 0,
hasPrimaryKeys: false,
autoIncrementField: 'id',
DAO: { [Function] super_: [Function] } } }
接下来,我想您会想到的是:“好吧,很简单,只需将您的属性添加到dataValues中即可。”
node.selectedValues.sensors = sensors;
node.dataValues.sensors = sensors;
我添加了这行,这行不通
如果我答对了,您想将sensors
集合添加到中node
。如果两个模型之间都有映射,则可以使用此处说明的include
功能或在每个实例上定义的getter。您可以在此处找到相关文档。values
后者可以这样使用:
db.Sensors.findAll({
where: {
nodeid: node.nodeid
}
}).success(function (sensors) {
var nodedata = node.values;
nodedata.sensors = sensors.map(function(sensor){ return sensor.values });
// or
nodedata.sensors = sensors.map(function(sensor){ return sensor.toJSON() });
nodesensors.push(nodedata);
response.json(nodesensors);
});
有机会也有nodedata.sensors = sensors
可能。
问题内容: 有没有一种方法可以将JSON数组转换为用于Java ListView数据绑定的普通Java数组? 问题答案:
问题内容: 似乎无法使用WCF的本机DataContractJsonSerializer或ASP.NET的本机JavaScript序列化器将Entity Framework对象序列化为JSON。这是由于两个串行器都拒绝的引用计数问题。我还尝试了Json.NET,它在引用计数问题上也特别失败。 编辑: Json.NET现在可以序列化和反序列化Entity Framework实体 。 我的对象是Ent
问题内容: 由于某种原因,我无法在MDN文档中找到这个简单的东西(也许我只是想念它)。 我希望这可以工作: …但是第一行抛出 如何从普通对象制作地图?我真的必须首先将其转换为键值对数组的数组吗? 问题答案: 是的,构造函数采用键值对数组。 是ES2017(19.1.2.5)中可用的新的Object静态方法。 如果您需要支持较旧的环境,并且不适合使用Transpilation,请使用polyfill
问题内容: 我有一个猫鼬的文档,我想在JSON编码之前进行扩展并作为响应发送出去。如果我尝试向文档添加属性,则将其忽略。该属性不会出现无法进行正常扩展的情况。奇怪的是,它可以正常工作并返回具有所有正确属性的对象。有一个更好的方法吗? 问题答案: 猫鼬继承自s,后者有一个方法。我相信您要寻找的应该是的结果。 http://mongoosejs.com/docs/api.html#document_D
问题内容: 服务器响应: 我从服务器获取Person数组。我想将通用的Person数组转换为输入的Person数组。所以我可以用 我创立了Javascript 但是我想要带有数组支持的跨浏览器版本 要么 问题答案: 在JavaScript中创建对象需要调用其构造函数。因此,首先,您将需要找到正确的参数,而这些参数可能并不总是仅仅是属性。之后,您可以将所有公共属性从JSON解析的对象重新分配给创建的
问题内容: 我的页面会生成这样的URL:如何将其转换为普通地址? 我将其用作的属性。 问题答案: 从JavaScript创建的URL 不能转换为“普通” URL。 一个URL并不是指在服务器上存在的数据,它是指数据您的浏览器目前在存储器中,当前页面。它在其他页面上将不可用,在其他浏览器中将不可用,并且在其他计算机上将不可用。 因此,通常来说,将URL 转换为“正常” URL 是没有意义的。如果要使