Пытаюсь создать todolist с помощью mongodb и выразить с помощью node

#node.js #mongodb #express

#node.js #mongodb #выразить

Вопрос:

Я продолжаю получать, и эта ошибка выдает er; // Необработанное событие ‘error’ ^

Ошибка типа: не удается прочитать свойство ‘items’ с нулевым значением

когда я запускаю свой код с помощью express с node, пытающимся запустить мой todolist, и эта ошибка продолжает появляться, не позволяя мне добавлять какие-либо новые элементы в пользовательский todolist, и проблема в соответствии с терминалом заключается в том, что именно в этой строке кода

 **else {
   List.findOne({Name: listName},function(err, foundList){
      foundList.items.push(item);
      foundList.save();
      res.redirect("/"  listName)
const itemsSchema = {
  Name:String
}**
  

И вот весь код

 const Item = mongoose.model("Item",itemsSchema)
    
    const item1 = new Item({
      Name:"Welcome to your todolist!"
    });
    
    const item2 = new Item({
      Name:"Hit the   button to add new items"
    });
    
    const item3 = new Item({
      Name:"Example: I have to study X today"
    });
    
    const defaultItems = [item1,item2,item3];
    
    
    const listSchema = {
      Name:String,
      items:[itemsSchema]
    };
    
    const List = mongoose.model("List", listSchema);
    
    
    app.get("/", function(req, res) {
    
      Item.find({},function(err,foundItems){
    
            if(foundItems.length===0){
    
              Item.insertMany(defaultItems,function(err){
            if(err){
              console.log(err)
            }else {
              console.log("Items saved successfully")
            }
          })
          res.redirect("/");
    
          }else {
            res.render("list", {listTitle: "Today", newListItems: foundItems});
    
          }
      });
    });
     
        app.get("/:customListName",function(req,res){
            const customListName = req.params.customListName;
    
          List.findOne({Name:customListName}, function(err,foundList){
            if(!err){
              if(!foundList){
                const list = new List({
                  Name: customListName,
                  items: defaultItems
                });
              list.save();
              res.redirect("/"   customListName);
                      } else {
                        res.render("list", {listTitle: foundList.Name, newListItems: foundList.items})
                }
            }
          })
    
        });
    
    
    app.post("/", function(req, res){
    
     const itemName = req.body.newItem;
     const listName = req.body.list;
    
     const item = new Item({
       Name:itemName
     });
    
     if(listName==="Today"){
      item.save();
    
      res.redirect("/");
     }else {
       List.findOne({Name: listName},function(err, foundList){
          foundList.items.push(item);
          foundList.save();
          res.redirect("/"  listName)
    
       })
     }
    
    });
  

Ответ №1:

Ошибка заключается в том, что объект, к которому вы пытаетесь получить доступ с .item , в данном случае не определен foundList

 else {
    List.findOne({Name: listName},function(err, foundList){
        if(!err amp;amp; foundList) {
            foundList.items.push(item);
            foundList.save();
            res.redirect("/"  listName)
        } else return (err ? res.status(500).json(err.message) : res.status(404).json("List not found"); // or however you want to handle errors 
    })
}
  

Вы должны проверить, определен ли foundList и существует ли ошибка внутри этого обратного вызова, прежде чем использовать этот объект.