лучший способ цепочки запросов мангуста

node.js mongodb express mongoose

5544 просмотра

2 ответа

150 Репутация автора

Я начинающий разработчик, использующий ноды и мангусты, и задаюсь вопросом, как лучше всего связывать запросы с мангузами. Я делаю как ниже, это не работает.

User.findByIdAndUpdate(req.params._id, user, { upsert: true })
.exec((err, updatedUser) => {
  if (addedCollections) {
    return User.findByIdAndUpdate(req.params._id, { $push: { _collections: { $each: addedCollections } } }, { upsert: true }).exec();
  }
  return new Query;
})
.exec(() => {
  return User.findById(req.params._id).populate('_collections');
})
.exec((err, user) => {
  res.json({ user });
})

Как я могу сделать цепочку нескольких запросов?

Автор: Benjamin Источник Размещён: 18.07.2016 02:48

Ответы (2)


11 плюса

149588 Репутация автора

Решение

Вы можете использовать цепочку обещаний, которая выглядит очень похоже на то, что вы пытаетесь сделать:

User.findByIdAndUpdate(req.params._id, user, { upsert: true })
    .then(updatedUser => {
      if (addedCollections) {
        return User.findByIdAndUpdate(req.params._id, { $push: { _collections: { $each: addedCollections } } }, { upsert: true });
      }
    })
    .then(() => {
      return User.findById(req.params._id).populate('_collections');
    })
    .then(user => {
      res.json({ user });
    })
    .catch(err => {
      res.status(500).json({ error : err });
    });
Автор: robertklep Размещён: 18.07.2016 03:57

1 плюс

830 Репутация автора

Вы можете использовать Rx и Mongoose-Observables. С Rx .flatMap () эквивалентно .then ().

var Rx = require('rx');
var observables = require('mongoose-observables');

/* get public header data, list of collections and projects */

router.get("/header", function(req, res) {
  let articleTitle = observables.finder.find(Articles, '{}', ['title'], null);
  let collectionTitle = observables.finder.find(Collections, '{}', ['title'], null);

  Rx.Observable.forkJoin([articleTitle, collectionTitle])
    .subscribe(
      (docs) => res.json(docs),
      (err) => console.error(err)
    );
});

Дополнительный пример на https://www.npmjs.com/package/mongoose-observables

Автор: Thomas Webber Размещён: 29.07.2017 11:50
Вопросы из категории :
32x32