Я продолжаю получать ошибку типа: Не удается прочитать свойство «найти» неопределенного

#javascript #node.js #mongoose

Вопрос:

В настоящее время я работаю над своим контроллером добавления в корзину, я что-то упускаю, поэтому он не будет работать? Похоже, что мои «Названия карт» не определены, как мне это определить? Прошу прощения, я новичок. У меня есть следующее в моем /контроллере/корзине:

 const Cart = require('../models/cart');

exports.addItemToCart = (req, res) => {

    Cart.find({ user: req.user._id})
    .exec( (error, cart) => {
        if(error) return res.status(400).json({ error });
        if(cart){
            //if cart already exists then update cart by quantity

            const product = req.body.cartItems.product;
            const item = cart.cartItems.find(c => c.product == product); //ERROR OCCURS HERE//

            if(item){

                Cart.findOneAndUpdate({ user: req.user._id, "cartItems.product": product}, {
                    "$set": {
                        "cartItems": {
                            ...req.body.cartItems,
                            quantity: item.quantity   req.body.cartItems.quantity
                        }
                    }
                })
                .exec( ( error, _cart) => {
                    if(error) return res.status(400).json({ error });
                    if(_cart){
                        return res.status(201).json({ cart: _cart})
                    }
                })

            } else {
                Cart.findOneAndUpdate({ user: req.user._id }, {
                    "$push": {
                        "cartItems": req.body.cartItems
                    }
                })
                .exec( ( error, _cart) => {
                    if(error) return res.status(400).json({ error });
                    if(_cart){
                        return res.status(201).json({ cart: _cart})
                    }
                })
            }

           

        } else {
            //if cart does not exist then create a new cart
            const cart = new Cart({
                user: req.user._id,
                cartItems: [req.body.cartItems]
            });

            cart.save( (error, cart) => {
                if(error) return res.status(400).json({ error });
                if(cart){
                    return res.status(201).json({ cart });
                }
            }); 
        }
    });

}
 

моя схема для корзины выглядит следующим образом:

 const mongoose = require('mongoose');
const cartSchema = new mongoose.Schema({

    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User',
        required: true
    },
    cartItems: [
        {
            product: { 
                type: mongoose.Schema.Types.ObjectId,
                ref: 'Product',
                required: true
            },
            quantity: {
                type: Number,
                default: 1
            },
            price: {
                type: Number,
                required: true
            }
        }
    ]
}, { timestamps: true });


module.exports = mongoose.model('Cart', cartSchema);
 

Когда я пытаюсь запустить почтовый запрос в postman с этим:

 {
    "cartItems": {
        "product": "611d12946c14c2232c933af8",
        "quantity": 1,
        "price": 7000
    }
}
 

Я получаю эту ошибку в своем gitbash:

 events.js:288
      throw er; // Unhandled 'error' event
      ^

TypeError: Cannot read property 'find' of undefined
    at cart.js:12:41
 

Комментарии:

1. Ваш cart — это массив. Если вам нужен объект, используйте Cart.findOne(... вместо него.

2. @CuongLeNgoc Я тоже пробовал это, но это не работает

Ответ №1:

это ваше _id определение? не похоже на это из пользовательской структуры. Я бы добавил console.log(req) прямо перед этой строкой 12, чтобы вы могли увидеть, что содержится во входящем параметре, и определить, какие элементы отсутствуют в предположениях вашего обработчика.