NodeJS — Express не может прочитать свойство null

#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 для имени.