节点 – 无法将键/值附加到对象

使用节点。 这很奇怪,我不能附加键/值…. broadcastStamp = date的对象结果。 我用typeofvalidation它是一个对象。 没有错误…关键/价值只是根本不存在。

 function broadcastSingleClient(result, event, httpObject) { var date = new Date().valueOf(); result.broadcastStamp = date; console.log(result); 

更新 :这个对象来自一个mongoose/ mongodb查询callback函数:

 Object.keys(models).forEach(function (model) { models[model].find({}).sort({_id: -1}).limit(1).exec( function (err, result){ broadcastSingleClient(result[0], model+"Result", res); }); 

当在没有exec()callback的shell中执行这个查询时,我能够附加到对象。

您是否打算在修改后保存result
您是否在您的broadcastSingleClient函数中使用Mongoose虚拟属性?

如果不是,那么我认为你可以使用lean ,将返回普通的js对象 – 没有Mongoose对象包装它。

尝试这个:

 Object.keys(models).forEach(function (model) { models[model].find({}).sort({_id: -1}).limit(1).lean().exec( // note the "lean" function (err, result){ broadcastSingleClient(result[0], model+"Result", res); }); 

我创build了jsfiddle,它的工作原理 – http://jsfiddle.net/volkhin/YGgzL/ ,我只添加了结果对象var result = {a: 1, b: 2}; 。 我想到的唯一的事情是结果不是简单的对象。 它绝对不会为null,undefined,数字等工作。

编辑 :那么我相信这是由于getter / setter。 最好避免修改这样的对象,因为修改它可能会导致mongoose内部不知道的后果。 如果您只需访问此对象中的某些数据,则可以尝试创build浅拷贝(例如,使用underscorejs _.clone或手动迭代其键),这将返回简单对象。 当然,你可以修改。 但是我不确定它是否会包含所有的数据 – 同样,它可能在很大程度上取决于getters / setters。