首页 > 解决方案 > 环回:在更新中使用 isValid()

问题描述

在我的应用程序的某个时刻,我想在更新现有实例之前验证请求数据,所以我使用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
});

我怎么能设置我在更新而不是在创建中验证。

标签: node.jsloopbackjsstrongloop

解决方案


Loopback 认为你的用户是一个新的模型实例。结果,验证失败(新实例不应该有 id 并且您的数据库中存在具有此电子邮件的“另一个”用户)。

使用持久化选项告诉环回您的用户之前已保存在数据库中:

new app.models.User(userInfo, {persisted: true})

环回在他的 Modle.find() 方法中使用几乎相同的方法将数据从数据库转换为环回模型实例:

var ctorOpts = {
  fields: query.fields,
  applySetters: false,
  persisted: true,
};

var obj;
try {
  obj = new Model(data, ctorOpts);
} catch (err) {
  return callback(err);
}

推荐阅读