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

时间:2014-07-06 20:04:38

标签: javascript node.js

使用Node。这很奇怪,我无法将键/值.... broadcastStamp = date附加到对象结果。我用typeof验证它是一个对象。没有错误......键/值根本就不存在。

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

UPDATE :此对象来自mongoose / mongodb查询回调函数:

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()回调的shell中执行此查询时,我能够附加到该对象。

2 个答案:

答案 0 :(得分:1)

我创建了jsfiddle并且它有效 - http://jsfiddle.net/volkhin/YGgzL/,我只将结果对象添加为var result = {a: 1, b: 2};。我想到的唯一事情是结果不是简单的对象。它肯定不适用于null,undefined,数字等。

修改: 然后我相信这是由于吸气者/安装者。并且最好避免修改这样的对象,因为修改它会导致mongoose内部产生未知的后果。如果您只需要访问此对象中的某些数据,您可以尝试创建浅拷贝(例如,使用underscorejs _.clone或手动迭代其键),这将返回简单对象。当然,你可以修改哪个。但是我不确定它是否会包含所有数据 - 再次,它可能在很大程度上取决于getter / setter。

答案 1 :(得分:1)

您是否打算在修改后保存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);
    });