MongoDB / mongoose - пост-хук не запущен

1

У меня есть эта модель/схема:

const InviteSchema = new Schema({
  inviter: {type: mongoose.Schema.Types.ObjectId, ref: 'Account', required: true},
  organisation: {type: mongoose.Schema.Types.ObjectId, ref: 'Organisation', required: true},
  sentTo: {type: mongoose.Schema.Types.ObjectId, ref: 'Account', required: true},
  createdAt: {type: Date, default: new Date(), required: true}
});

InviteSchema.post('save', function(err, doc, next) {

  // This callback doesn't run
});

const Invite = mongoose.model('Invite', InviteSchema);

module.exports = Invite;

Вспомогательная функция:

exports.sendInvites = (accountIds, invite, callback) => {

  let resolvedRequests = 0;

  accountIds.forEach((id, i, arr) => {

    invite.sentTo = id;

    const newInvite = new Invite(invite);

    newInvite.save((err, res) => {

      resolvedRequests++;

      if (err) {

        callback(err);

        return;
      }

      if (resolvedRequests === arr.length) {
        callback(err);
      }
    });
  });
};

Конечная точка маршрутизатора, вызывающая вспомогательную функцию:

router.put('/organisations/:id', auth.verifyToken, (req, res, next) => {

  const organisation = Object.assign({}, req.body, {
    updatedBy: req.decoded._doc._id,
    updatedAt: new Date()
  });

  Organisation.findOneAndUpdate({_id: req.params.id}, organisation, {new: true}, (err, organisation) => {

    if (err) {
      return next(err);
    }

    invites.sendInvites(req.body.invites, {
      inviter: req.decoded._doc._id,
      organisation: organisation._id
    }, (err) => {

      if (err) {
        return next(err);
      }

      res.json({
        error: null,
        data: organisation
      });
    });
  });
});

Проблема здесь в том, что .post('save') не запускается, несмотря на следующие инструкции, то есть используя .save() для модели вместо, например, .findOneAndUpdate. Некоторое время я копал, но я не могу понять, в чем проблема.

Документы Invite сохраняются в базе данных очень хорошо, поэтому крючок должен запускаться, но это не так. Любые идеи, что может быть неправильным?

Теги:
mongoose

1 ответ

2
Лучший ответ

Вы можете объявить почтовый крючок с различным количеством параметров. С 3 параметрами вы обрабатываете ошибки, поэтому ваш почтовый крюк будет вызван только при возникновении ошибки. Но если ваш крючок имеет только 1 или 2 параметра, он будет выполнен с успехом. Первым параметром будет документ, сохраненный в коллекции, а второй, если он передан, является следующим элементом. Для получения дополнительной информации, проверьте официальный документ: http://mongoosejs.com/docs/middleware.html Надеюсь, что это поможет.

  • 3
    Это не имеет никакого смысла ... Но теперь это работает; S Большое спасибо, вы спасли меня.
  • 0
    Означает ли это, что если я решу не указывать перехват с обратным вызовом, принимающим 3 аргумента, тогда мой перехват с обратным вызовом, принимающим 2 аргумента, будет пропущен, а обычный обработчик будет вызван с ошибкой? Например, если при сохранении произошла ошибка, будет ли она передана непосредственно в функцию обратного вызова .save(cb) ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню