为什么我不能将javascript变量设置为false?

出于某种原因,我的articleExists变量在第6行不会被设置为true,尽管我使用控制台日志来确认它所包含的if语句是否正确触发。

app.post("/articles", function(req, res) {
  let articleExists = (false);
  Article.find(function(err, results) {
    results.forEach(function(result) {
      if (result.title === req.body.title) {
        articleExists = (true);
      }
    });
  });
  if (articleExists) {
    res.send("Article already exists!")
  } else {
    const newArticle = new Article({
      title: req.body.title,
      content: req.body.content
    });
    newArticle.save(function(err) {
      if (err) {
        res.send(err);
      } else {
        res.send("Article saved successfuly")
      }
    });
  }
});

解决方案:

我相信这种情况可能是由于对nodejs async性质的误解造成的。

我建议你稍微研究一下当前nodejs版本中可用的Promises和AsyncAwait,这让代码变得更加干净和容易理解。

这篇文章似乎很好解释。https:/codeburst.iojavascript-es-2017-learn-async-await by-example-48acc58bad65。

关于你的问题,在这里给你一个未经测试的不优雅的解决方案,希望对你有所帮助。

app.post("/articles", async (req, res) => {
    const results = await Article.find(query);
    const articleExists = results.some(result => result.title === req.body.title),
    if (articleExists) {
        return res.send("Article already exists!")
    }
    const newArticle = new Article({
        title: req.body.title,
        content: req.body.content
      });
    newArticle.save(err => {
      if (err) {
        return res.send(err);
      } else {
        return res.send("Article saved successfuly")
      }
    });
});

给TA打赏
共{{data.count}}人
人已打赏
未分类

从不同的构造体访问和添加数据

2022-9-8 9:43:16

未分类

在django DetailView中更新项目

2022-9-8 9:43:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索