Javascript新对象字段未保存

问题描述:

我使用node.js和mongoose来获取一些基于查询的数据。 Mongoose函数findOne返回一个承诺,它给了我一个javascript对象。我想为该对象添加一个新字段并为其赋值,然后应用stringify函数。如果我打印了字符串,我添加的新字段将不会被打印,即使我可以通过该对象访问它。Javascript新对象字段未保存

model.findOne({},function (err, names) {}) 
     .then(function(data){ 
        response.writeHead(200, {"Content-Type": "application/json"}); 
        data['status'] = 200; 
        data['message'] = 'OK'; 
        response.write(JSON.stringify(data)); 
        response.end(); 
       }, 
       function(err) { 
        response.writeHead(500, {"Content-Type": "application/json"}); 
        var execError = '{"status":500,"message":"'+ err.toString() +'"}'; 
        response.write(execError); 
        response.end(); 
       } 
     ); 

我相信你是lean()方法之后,这可以让你回到一个简单的查询链的结果文档的JavaScript版本。它适用于Mongoose而不是创建完整模型实例,然后获得可修改的完整JavaScript对象。因此,将您的查询链改为:

var promise = model.findOne().lean(); 
promise.then(function(data){ 
     response.writeHead(200, {"Content-Type": "application/json"}); 
     data['status'] = 200; 
     data['message'] = 'OK'; 
     response.write(JSON.stringify(data)); 
     response.end(); 
    }, 
    function(err) { 
     response.writeHead(500, {"Content-Type": "application/json"}); 
     var execError = '{"status":500,"message":"'+ err.toString() +'"}'; 
     response.write(execError); 
     response.end(); 
    } 
); 
+1

它的工作原理。谢谢。 – Andrew