#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, чтобы вы могли увидеть, что содержится во входящем параметре, и определить, какие элементы отсутствуют в предположениях вашего обработчика.