В какой-то момент в моем приложении я хочу проверить данные запроса перед обновлением существующего экземпляра, поэтому я использую метод isValid (). Но это не подтверждает валидность из-за уникальности атрибута.
const userInfo = {
id: data.id,
name: data.name,
email: data.email,
password: data.password
};
const instance = new app.models.User(userInfo);
instance.isValid(valid => {
console.log(valid); //false, "email" is not unique and "id" should be absent
});
Как я могу установить, что я проверяю в обновлении не в create.
Loopback думает, что ваш пользователь является новым экземпляром модели. В результате проверка не выполняется (новый экземпляр не должен иметь идентификатор, а «другой» пользователь с этими письмами существует в вашей базе данных).
Используйте устаревшие параметры, чтобы сообщить loopback, что ваш пользователь был сохранен в базе данных ранее:
new app.models.User(userInfo, {persisted: true})
Почти тот же подход loopback использует в своем методе Modle.find () для преобразования данные из базы данных в экземпляр модели loopback:
var ctorOpts = {
fields: query.fields,
applySetters: false,
persisted: true,
};
var obj;
try {
obj = new Model(data, ctorOpts);
} catch (err) {
return callback(err);
}