Javascript 类型错误:无法读取未定义的属性"find"



你好,我是编程新手& &;面对一个我自己无法解决的奇怪问题,请看下面我的代码。

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);
}) 
}
})
};
  1. 出现错误const addOne = data.cartItems.find(c=>Product == Product);

  2. 但是根据我的逻辑代码不应该进入if(data)条件,因为数据对于第一个条目是空的。它应该放到else代码的底部

但是根据我的逻辑代码,不应该进入if(data)条件因为第一个条目的数据是空的。它应该去else代码的底部

您的if语句条件不能使您避免错误TypeError: Cannot read property 'find' of undefined,因为"data"包含任何类型的值(不包括->空,未定义或0),但您期望的"cartItems"不存在于你的"数据"中。对象。

您可以尝试以下代码片段来调试您的代码:

console.log(data.cartItems) // will return undefined
console.log(data) // doesn't contain "cartItems"

如果cartItems对您的病情很重要,请使用:

if(data && data.cartItems)

对于您的帖子中的#2,您的data不太可能无法通过真实性测试:https://developer.mozilla.org/en-US/docs/Glossary/Truthy

注意if ({})为真。甚至一个空的JSON响应也是真实的。

既然你记录了数据,请分享它的价值。最好在你的问题中提供所有可能的数据。

最新更新