Команда post.save();
просто начнет работать, а ваш код тем временем продолжится. Когда ваш Post.find({} ...
начинает работать, ваш post.save();
не закончил работу, и поэтому вы не получаете результатов.
Измените функцию, чтобы вы дождались сохранения, чтобы дать вам обратный вызов с ОК, а затем вы можете запросить базу данных.
app.post("/", function(req, res) {
const postTitle = req.body.postTitle;
const postDesc = req.body.postDesc;
const post = new Post({
title: postTitle,
desc: postDesc
});
post.save(function(err) {
if (err) {
// Something went wrong with the save, log and return the error message
console.error(err);
return res.send(err);
}
console.log(`Post "${postTitle}" saved to database.`);
// Since we know that the post has been saved, continue querying the database.
Post.find({}, function(err, data) {
if (err) {
// Something went wrong with the query, log and return the error message
console.error(err);
return res.send(err);
}
console.log(data);
res.send(data);
});
});
});
Этот код не протестирован.
Вы также можете попробовать async / await out, см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function и также mon goose документация для обещаний и async / await https://mongoosejs.com/docs/promises.html.
Я бы сам написал такую функцию, используя async / await и es6.
app.post('/', async(req, res) => {
const post = new Post({
title: req.body.postTitle,
desc: req.body.postDesc
});
try {
await post.save();
const posts = await Post.find();
console.log(posts);
} catch (err) {
console.error(err);
}
res.end();
});