0

我不知道在执行猫鼬查询并保存后构造 Javascript 以返回更新的 json 对象列表。

目前我正在尝试类似于下面的代码但没有运气。resBankMembers 数组始终为空。

来自请求正文的 Json:

[
 {
   _id : (some id), 
   name = (some name)
 },  
 { _id : (some id), 
   name = (some name) 
 }
} 

代码示例(不工作):

var jsonText = JSON.stringify(req.body);
var jsonObject = JSON.parse(jsonText);
var resBankmembers = [];    

jsonObject.forEach(function(updatebankmember) {
    var bid = ObjectID(updatebankmember._id);
    BankMember.findOne({ "_id" : bid }, function(error,bankmember) {
        if (error) {
            console.log(error);
        }
        else {  
            bankmember.name = updatebankmember.name;
            bankmember.save(function (error) {
                if(error) {
                    console.log(error);
                }
                else {
                    resBankmembers.push(bankmember);
                }
            });
        }               
    });
});
res.send(200, resBankmembers);

请帮忙!

4

1 回答 1

0

尝试这个:

var jsonText = JSON.stringify(req.body);
var jsonObject = JSON.parse(jsonText);

jsonObject.forEach(function(updatebankmember, i) {
    var bid = ObjectID(updatebankmember._id);
    BankMember.findOne({ "_id" : bid }, function(error,bankmember) {
        if (error) {
            console.log(error);
        }
        else {  
            bankmember.name = updatebankmember.name;
            bankmember.save(function (error) {
                if(error) {
                    console.log(error);
                }
                else {
                    jsonObject[i].id   = bankmember.id;
                    jsonObject[i].name = bankmember.name;
                }
            });
        }               
    });
});
res.send(200, jsonObject);

与其尝试将对象推入数组,不如更新已经解析的JSON.

我还建议elsesave函数中使用它:

else {
     for (var key in bankmember) {
         jsonObject[i][key] = bankmember[key];
     }
}

以防您稍后扩展 bankmember 对象。

forEachIE 8 及以下版本不支持该功能,因此我建议:

if (Array.prototype.forEach) {
    Array.prototype.forEach = function (fun) {
        for (var i = 0; i < this.length; i++) {
            fun.call(this, this[i], i)
        }
    };
}

除非你不想支持 IE。我希望这会有所帮助。

于 2013-07-14T19:01:41.610 回答