Я не совсем уверен, как это сформулировать, так что, надеюсь, мой пример имеет смысл (это все в моей person.js
модели). Скажем, у меня есть эта person
схема (просто пример для этого вопроса).contact person
человека ДОЛЖЕН быть в списке этого человека relatives
.Элемент POST будет выглядеть следующим образом:
{
name: "Frank",
contact_person: "Jene",
relatives: ["Jene", "Pete", "Harry"]
}
И скажем, что мы обновляем это person
с помощью PUT, как это:
{
id: (whatever),
contact_person: "Jason"
}
Это должно вызвать ошибку, потому что "Jason"
нет в списке этого человека в relatives
.
Так что для моего поста я могу решить эту проблему следующим образом:
personSchema.pre('save', function(next) {
if (!this.relatives.includes(this.contact_person)) {
return next({'error': 'Not a valid contact_person'});
}
next();
});
Это работает, потому что this
относится к телу входящего запроса,Но в приведенном выше примере PUT это не будет связываться с relatives
, поэтому вы не можете проверить this.relatives
Так как мне получить доступ к данным текущего элемента схемы, а НЕ к данным поступающегозвоните. Мне нужно что-то вроде этого:
personSchema.pre('save', function(next) {
thisItem = currentSchemaItem; // Something like this
if (!thisItem.relatives.includes(this.contact_person)) {
return next({'error': 'Not a valid contact_person'});
}
next();
});