Javascript TypeError: Cannot read property 'find' of undefined

Javascript TypeError: Cannot read property 'find' of undefined

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

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=>c.product == 产品);

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

But by my logic code should not go inside the if(data) condition because the data is empty for the first entry. It should go to the bottom to the else code.

您的 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)

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

注意 if ({}) 是真实的。即使是空的 JSON 回复也是真实的。

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