Почему я не могу установить для моей переменной javascript значение false? - PullRequest
0 голосов
/ 23 апреля 2020

По какой-то причине моя переменная articleExists не будет иметь значение true в строке 6, несмотря на то, что я использую консольные журналы, чтобы подтвердить, что оператор 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")
      }
    });
  }
});

1 Ответ

1 голос
/ 23 апреля 2020

Я полагаю, что эта ситуация, вероятно, вызвана неправильным пониманием природы nodejs asyn c.

Я рекомендую вам немного взглянуть на Promises и Async / Await, доступные в текущих nodejs версиях, что сделало код намного чище и проще для понимания.

Эта статья, кажется, объясняет это довольно хорошо: https://codeburst.io/javascript-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")
      }
    });
});
...