findOne()或find()返回null,即使MongoDB中存在条目

k2fxgqgv  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(119)

我正在尝试做一个待办事项列表节点应用程序。我使用下面的代码来创建一个列表与一个特定的标题的情况下,它还没有被创建,并添加一些默认值;其中as,如果它已经被创建,则将执行到与它相关联的页面的重定向,并且与该列表相关联的所有任务将显示在页面上。

app.get("/:customListName", function (req, res) {
    const customListName = req.params.customListName;
    List.find({ name: customListName })
    .then((listFound) => {
    if (listFound.length === 0) {
        const list = new List({
        name: customListName,
        items: defaultItems,
    });
       list.save();
       console.log(
         "list with a name of " + customListName + " has been created."
       );
       return res.redirect("/" + list.name);
    } else {
       return res.render("list", {
          listTitle: listFound[0].name,
          newListItems: listFound[0].items,
       });
     }
   })
   .catch((err) => {
       console.log("Error faced while creating new list ===> " + err);
       });
   });

然而,第一次-当没有特定名称listFound的列表时-它在MongoDB中创建了一个列表;尽管如此,find()甚至findOne()在第二次运行时也会返回null,尽管之前已经添加了一个值。代码中的错误是什么,因为我只在列表创建后将其重定向到相关页面**一次。

ctehm74n

ctehm74n1#

你会发现调试你的代码越来越困难,因为你似乎是通过不分离你的HTTP动词来混淆你的逻辑。我的意思是你应该处理用post请求创建文档和用get请求检索文档。你可以通过像这样分割你的逻辑来更好地利用express框架:

// Use a form or JavaScript to post your new messages to the /list/create route
app.post('/list/create', async (req, res) =>{
   console.log(req.body); //< Make sure data is parsed and present in req.body
   try{
      const {name} = req.body; //< Add other fields you post here too
      const list = await List.create({name}); // Add new document to collection
      return res.redirect("/" + list.name);
   }catch(err){
      console.log("Error faced while creating new list ===> " + err);
      res.status(400).json({
         error : 'Appropriate error message sent to front-end'
      });
   }
});

// Then get your list from the /:customListName
app.get('/:customListName', async (req, res) =>{
   try{
      const name = req.params.customListName;
      const listFound = await List.findOne({name}); //< Use findOne instead if you know you are only looking for one document
      if(listFound){ // listFound will be null if no match
         return res.render("list", {
            listTitle: listFound.name,
            newListItems: listFound.items,
         });
      }else{
         //Decide what to do if no document found i.e. listFound is null
      }
   }catch(err){
      console.log("Error faced while creating new list ===> " + err);
      res.status(400).json({
         error : 'Appropriate error message sent to front-end'
      });
   }
});

相关问题