mongoose 如何在nodejs中更改事件顺序

bttbmeg0  于 2023-04-06  发布在  Go
关注(0)|答案(1)|浏览(75)

我通过mongoose将nodejs应用程序连接到mongodb
为了某种目的,我需要检查,如果我的数据库中包含一些数据,具有某些特定的标题topic,我使用find()方法,逐一遍历数据并与topic进行比较,最后,如果没有找到数据,则需要返回一些特殊的代码,例如not found
但尽管在find()方法中检查数据,它首先向我展示了not found代码,请帮助.
我试着console.log(),检查哪段代码先执行
函数为:

app.get("/posts/:topic", (req, res) => {
  const topic = _.lowerCase(req.params.topic);
  var found = false;

  posts.find().then((result)=>{
    result.forEach((element)=>{
      if(_.lowerCase(element.postTitle) === topic){
        found = true;
        console.log("checking in posts..");
        res.render("post", {postTitle: element.postTitle, postContent: element.postContent});
      }
    })
  }).catch((err)=>console.log(err));
  

  if(found == false){
      console.log("default");

      // res.render("post", {postTitle: "Oops!...", postContent: "The post you are searching, does not exists.....try again."});
  }

});

它将输出记录为:

default
checking in posts

但它应该首先检查帖子,然后转到结束代码.....并且应该记录为:
检入帖子默认值

chy5wohz

chy5wohz1#

我发现你在代码中使用了Promise,但似乎你不知道JavaScript中的异步是什么。你应该检查asynchronous。在这段代码中,我建议你可以这样写:

app.get("/posts/:topic", (req, res) => {
  const topic = _.lowerCase(req.params.topic);
  var found = false;

  posts.find().then((result)=>{
    result.forEach((element)=>{
      if(_.lowerCase(element.postTitle) === topic){
        found = true;
        console.log("checking in posts..");
        res.render("post", {postTitle: element.postTitle, postContent: element.postContent});
      }
      if(found == false){
        console.log("default");
        // res.render("post", {postTitle: "Oops!...", postContent: "The post you are searching, does not exists.....try again."});
      }
    })
  }).catch((err)=>console.log(err));
  
});

相关问题