出于某种原因,我的 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异步性质的误解造成的。
我建议您稍微研究一下 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")
}
});
});
关于javascript - 为什么我不能将 javascript 变量设置为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61393294/