我可能忽略了最简单的解决方案,但我已尝试过任何我能想到的或在互联网上找到的东西。
我正在尝试向我的输出中需要的JSON对象添加属性。但无论我尝试添加属性,它都不会显示在我的对象中。我确认'doc'变量是一个实际的对象。
没有控制台错误。 Console.log()显示'doc'对象的内容,仅此而已。
任何人都知道发生了什么事?
Blog.findOne({'slug': req.params.slug}, function(err, doc) {
if (!err){
if(_.isEmpty(doc)) { res.status(404).json({ response: "Nothing found here." }); } else {
var blogPost = doc;
blogPost.someProperty = 'test';
console.log(blogPost); // doesn't contain new property
res.status(200).json( { response: blogPost });
}
} else { throw err; }
});
blogPost / doc
的输出{
"response": {
"_id": "55e31854823389ec1f5506fc",
"title": "A sample post.",
"slug": "a-sample-post2",
"body": "Hello world. This is a sample post. \n\nThis should be a new paragraph.",
"__v": 0,
"date": "2015-08-30T14:51:00.836Z"
}
}
浏览器中这样的简单测试确实有效。所以我真的很困惑为什么它在我的NodeJS应用程序中不起作用。与回调/异步或其他什么有关?
var test = {};
test.prop = "test";
console.log(test);
Object {prop: "test"}
答案 0 :(得分:1)
如果您希望将结果设为lean
,则应使用object
功能。
您甚至可以稍微重新格式化代码以消除缩进级别。
Blog.findOne({'slug': req.params.slug}).lean().exec(function(err, doc) {
if (err){
throw err;
}
if(_.isEmpty(doc)) {
res.status(404).json({ response: "Nothing found here." });
return;
}
// else is not required
var blogPost = doc;
blogPost.someProperty = 'test';
res.status(200).json( { response: blogPost });
});