您好,我是编码新手,遇到一个我自己无法解决的奇怪问题,请参阅下面的代码。
const Cart = require('../model/cart');
exports.addToCart = (req, res) => {
Cart.find({user: req.user._id}).exec((error, data) => {
if (error) return res.send(error);
if (data) {
console.log(data);
const product = req.body.cartItems.product;
const addOne = data.cartItems.find(c=>c.product == product);
if(addOne){
Cart.findOneAndUpdate({ "user" : req.user._id, "cartItems.product" :product},{
"$set":{
"cartItems": {
...req.body.cartItems,
quantity : addOne.qunatity + req.body.cartItems.qunatity,
}
}
}).exec((error,data)=>{
if (error) return res.send(error);
if (data) return res.send(data);
});
}
else{
Cart.findOneAndUpdate({ user : req.user._id},{
"$push":{
"cartItems": req.body.cartItems
}
}).exec((error,data)=>{
if (error) return res.send(error);
if (data) return res.send(data);
});
}
}
else {
const cart = new Cart({
user: req.user._id,
cartItems: [req.body.cartItems]
});
cart.save((error, data) => {
if (error) return res.send(`Something went wrong ${error}`);
if (data) return res.send(data);
})
}
})
};
我遇到一个错误
const addOne = data.cartItems.find(c=>c.product == product);
但根据我的逻辑,代码不应进入 if(data) 条件,因为第一个条目的数据为空。它应该到else代码的底部。
答案 0 :(得分:0)
但根据我的逻辑代码不应该进入 if(data) 条件 因为第一个条目的数据是空的。它应该去 底部到else代码。
您的 if
语句条件不会使您免于错误 TypeError: Cannot read property 'find' of undefined
因为“数据”包含任何类型的值(排除 -> null、未定义或 0)但您预期的“cartItems”不'不存在于您的“数据”对象中。
您可以尝试使用以下代码片段来调试您的代码:
console.log(data.cartItems) // will return undefined
console.log(data) // doesn't contain "cartItems"
如果 cartItems
对您的条件很重要,请使用:
if(data && data.cartItems)
答案 1 :(得分:0)
对于您帖子中的 #2,您的 data
不太可能通过真实测试:https://developer.mozilla.org/en-US/docs/Glossary/Truthy
请注意 if ({})
是真实的。即使是空的 JSON 响应也是真实的。
既然你记录了数据,请分享它的价值。最好在问题中提供所有可能的数据。