Пн goose асинхронно / жду правильный метод - PullRequest
0 голосов
/ 19 апреля 2020

Я новичок в mon goose, и узел может кто-нибудь указать, какой метод является правильным, я собираюсь отправить клиенту список всех продуктов в моем MongoDB.

метод 1

 items = await Product.findById({})
.then((items) => {
  if (items == null) {
    res.status(404).send("no items");
  } else {
    res.send(items);
    next();
  }
})
.catch((err) => {
  res.status(404).send({ error: err });
});

метод 2

items = await Product.find({}).exec();
  res.status(200).send(items)
  next();

Также не могли бы вы указать, как я могу использовать еще один вызов ожидания, если мне нужно обработать элементы и отправить после этого. Спасибо заранее.

1 Ответ

0 голосов
/ 19 апреля 2020

Метод 2 должен выглядеть следующим образом:

router.get('/:param', async function(req, res) {
    try {
        let items = await Product.find({}).lean()
        res.status(200).json(items);
    } catch (e) {
        res.status(404).json(e);
    }
});
  1. Вам не нужно .exec()
  2. Вам нужно использовать .lean(), если вы хотите получить js объект в элементах, а не мон goose.
  3. Старайтесь не запрашивать всю коллекцию документов одновременно, особенно если в коллекции более 1000+ документов. В противном случае сделайте это через .cursor или limit(Number), чтобы избежать проблем с БД.

Также, как уже упоминалось выше, попробуйте использовать синтаксис async/await и ES6. Это выглядит лучше.

И, пожалуйста, пометьте вопрос как ответивший, чтобы избежать пометки вашего вопроса.

...