У меня есть эта модель/схема:
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
сохраняются в базе данных очень хорошо, поэтому крючок должен запускаться, но это не так. Любые идеи, что может быть неправильным?
Вы можете объявить почтовый крючок с различным количеством параметров. С 3 параметрами вы обрабатываете ошибки, поэтому ваш почтовый крюк будет вызван только при возникновении ошибки. Но если ваш крючок имеет только 1 или 2 параметра, он будет выполнен с успехом. Первым параметром будет документ, сохраненный в коллекции, а второй, если он передан, является следующим элементом. Для получения дополнительной информации, проверьте официальный документ: http://mongoosejs.com/docs/middleware.html Надеюсь, что это поможет.
.save(cb)
?