我是sails.js的新手,经过一些工作,我发现beforeValidate()
难以使用。
我的模型User
只有2个属性nickname
和age
。
这两个属性都标记为required
,因此风帆将检查验证。
在创建用户时,如果客户端没有指定其昵称,我想为其分配一个随机昵称,如下所示:
beforeValidate: function(user, next){
if (!user.nickname) user.nickname = randomString(5);
next();
}
应在sails验证required
的{{1}}标记之前应用此分配,因此nickname
似乎是唯一合理的地方。beforeValidate()
但是,当我想更新用户的年龄时:
User.update(user.id, {age: 40});
它还会触发beforeValidate()
,遗憾的是,会分配一个新的昵称并替换原始昵称,因为user
中的参数beforeValidate()
现在是{age: 40}
。
我期望user
中的参数beforeValidate(user, callback)
应该更新用户,更改和未更改属性的组合(例如,具有旧ID,旧昵称和新年龄的用户),而不是仅更改了我在User.update()
中指定的属性(例如,只有{age: 40}
)。
我误解了什么吗?
答案 0 :(得分:1)
在调用create()
时,添加新记录所需的所有值都会传递给beforeValidate
。而在调用update()
时,只有将更新的值传递给beforeValidate
。这就是您将user.nickname
作为空值的原因。
请参阅http://sailsjs.org/documentation/concepts/models-and-orm/lifecycle-callbacks上的文档。
创建回调
beforeValidate:fn(values,cb)
更新回调
beforeValidate:fn(valuesToUpdate,cb)