繁体   English   中英

Javascript 类型错误:无法读取未定义的属性“查找”

[英]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 == product);

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

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

您的if语句条件不会使您免于错误TypeError: Cannot read property 'find' of undefined because "data" contains any kind of value (exclude -> null, undefined or 0) 但您预期的“cartItems”没有存在于您的“数据”object 中。

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

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 响应也是真实的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM