【发布时间】:2018-02-05 06:14:36
【问题描述】:
我在从 node.js 程序中的 MongoDB 数组中删除项目时遇到问题,并在程序执行流程中发现了一个烦人的问题。 代码如下:
productController.deleteProduct = function(req,res){
productModel.findById(req.query.id,function(err, product){
if(err){
res.send(err);
}
if(storeController.deleteStoreProduct(product,res.locals.store,req)){
product.remove(function(err){
if(err){
res.send(err);
}
res.send('product deleted successfully');
});
}
else{
res.send('delete operation failed');
}
});
}
上述函数运行良好。问题在于以下功能。 上述函数调用 storeController.deleteStoreProduct 这是 storeController.deleteStoreProduct 的代码:
storeController.deleteStoreProduct = function(product, store, req){
var isDeleted = false;
storeModel.findById(store, function(err, foundStore){
if(product.category === "electronics"){
if(product.subcategory === "mobiles"){
console.log('beginning');
storeModel.update({"storeId":"store-456"}, {'$pull': {"electronics.mobiles": mongoose.Types.ObjectId(product._id)}});
console.log('yeah done!!');
isDeleted = true;
}
}
});
if(isDeleted === true){
console.log('isdeleted: true');
return true;
}
else{
console.log('isdeleted: false');
return false;
}
}
在 storeController.deleteStoreProduct 函数中,我编写了 console.log 语句,仅用于调试目的。
当我运行这个程序时,它所要做的就是从 storeModel 集合中删除一个特定的项目,但它只输出 console.log 语句; delete 语句上方的console.log 语句和该语句下方的语句执行良好,但是这两个console.log 语句中间的实际delete 语句不会执行,也不会引发错误。
输出:
isdeleted: false
beginning
yeah done!!
它不是从头开始运行程序,而是直接转到storeController.deleteStoreProduct函数中的最后一个if else语句。 我无法理解这里发生了什么。
更多详情:
函数storeController.deleteStoreProduct(product,store,req) 中的参数是
1.产品
这是一个对象,是这样的:
{
"name":"asus zenfone 2",
"category": "electronics",
"subcategory":"mobiles",
"details":{
"specs":["5mp rear cam","2gb ram",16gb rom],
}
}
2.商店
store 是mongodb中store对象的_id。
3.请求
这是请求对象
【问题讨论】: