#node.js #json #api #express #mongodb-query
Вопрос:
Хороший день. Я создаю API в NodeJS. Ниже приведен метод, который выдает мне ошибку.
exports.getCartItems = (req, res) => {
Cart.findOne({ user: req.user._id })
.populate("cartItems.product", "_id name price productPictures")
.exec((error, cart) => {
if (error) return res.status(400).json({ error });
if (cart) {
let cartItems = {};
cart.cartItems.forEach((item, index) => {
console.log(item.product); //This gives result, when I remove everything else
cartItems[item.product._id.toString()] = {
_id: item.product._id.toString(),
name: item.product.name,
img: item.product.productPictures[0].img,
price: item.product.price,
qty: item.quantity,
};
});
res.status(200).json({ cartItems });
}
});
//}
};
Я получаю ошибку
^
TypeError: Cannot read property 'name' of null
Однако, когда я console.log item.product
, я получаю результаты. Это швон на изображении ниже. Пожалуйста, что я делаю не так?
Спасибо.
Комментарии:
1. Если строка кода , которая вызывает ошибку , такая:
name: item.product.name,
, то ошибка говорит вам, чтоitem.product
, по-видимомуnull
, где-то в вашем.forEach()
цикле. Дополнительная отладка подскажет вам, когда именно это произойдет, и даст вам представление о том, как защититься от этого кода.2. Вы также, вероятно, хотите утешить. войдите в журнал «cart.cartItems» перед циклом, чтобы убедиться, что в массиве нет объектов «null», потому что значение null будет выдано, если какие-либо элементы не обладают этим свойством. Вы также можете поместить ловушку try в свой цикл и в консоль catch. зарегистрируйте элемент, чтобы узнать, какое у него значение null для имени.