Пн goose найти не вернуть полную коллекцию - PullRequest
2 голосов
/ 05 мая 2020

Я пытаюсь прочитать данные из формы html с помощью POST, сохранить их в mongoDB, запросить их с помощью model.find () и распечатать в консоли. Но когда я запускаю это в первый раз, find () возвращает пустой объект, и при вводе следующего ввода предыдущие данные, за исключением текущего ввода, извлекаются th find (). Как распечатать всю коллекцию, включая только что введенные данные

 app.post("/", function(req, res){
      postTitle = req.body.postTitle;
      postDesc = req.body.postDesc;
      const post = new Post({
        title:postTitle,
        desc:postDesc
      });
      post.save();

      Post.find({}, function(err, data){
        if(err){
          console.log(err);
        }else{
          console.log(data);
        }
      });
      //console.log(postTitle, postDesc);
    });

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

Команда 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();
});
1 голос
/ 05 мая 2020

Вы можете попробовать с exe c

Post.find({}).exec(function (err, d) {
    if(err){
      console.log(err);
    }else{
      console.log(d);
    }
});

Или попробуйте использовать async await, чтобы убедиться, что ваш запрос выполняется шаг за шагом

const user_info = await Post.find({});

Это код не проверен

0 голосов
/ 05 мая 2020

здесь post.save () - это асинхронная c функция, что означает, что она не завершается немедленно. Вам нужно использовать asyn c - await, чтобы дождаться, пока функция save () завершит sh, а затем вы запросите базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...