问题描述
|
我正在使用mongoDB构建一个node.js应用程序。
我需要创建一个书本对象,保存它,并将其添加到用户的书本列表中。
然后,我需要为该书设置一个“保存”,然后为该用户设置一个“保存”(已为其更新图书列表)。
我做类似的事情:
book = new Book(); // I\'m using moogoose
book.title = req.params.title
book.save(function(err){
if(!err){
jsonObj = {\"title\":book.title};
res.writeHead(200,{\'content-type\': \'application/json\'});
res.write(JSON.stringify(jsonObj));
res.end();
// Add book in user things list
user.books.push(book);
user.save(function(error){
if(error) {
console.log(JSON.stringify({ \"error\" : \"internal error\" }));
}
});
} else {
jsonObj = { \"error\" : \"internal error while saving book\" };
res.writeHead(200,{\'content-type\': \'application/json\'});
res.write(JSON.stringify(jsonObj));
res.end();
}
console.log(JSON.stringify(jsonObj));
});
似乎有时这本书保存在DB中,而不保存到用户的书籍列表中,有时则相反。我对异步回调方法不甚了解(位于其顶部...)。
我肯定做错了什么……最好的方法是什么?
解决方法
我不太确定自己的意思,但是我认为Mongo正在保存书中的两个不同的对象,因为它认为它们是两个不同的对象(即使对于Javascript,用户数组中的书和该对象都指向同一对象)。
将Book对象保存在Mongo中会更好。获取_ObjectID(由MongoDB生成)并将其保存到用户books数组。
,为了进行调试,请将您的代码更改为:
} else {
console.log(\"error saving book : \",err);
jsonObj = { \"error\" : \"internal error while saving book\" };
res.writeHead(200,{\'content-type\': \'application/json\'});
res.write(JSON.stringify(jsonObj));
res.end();
}