我是sails.js的新手,经过一些工作后,我发现beforeValidate()很难使用。
我有一个模型User,只有两个属性:nickname和age。这两个属性都被标记为required,因此sails将检查验证。在创建用户时,如果客户端没有指定它的昵称,我想为它指定一个随机昵称,如下所示:
beforeValidate: function(user, next){
if (!user.nickname) user.nickname = randomString(5);
next();
}这个赋值应该在sails验证nickname的nickname标记之前应用,因此beforeValidate()似乎是唯一合理的位置。但是,当我想更新用户的年龄时,如下所示:
User.update(user.id, {age: 40});它还将触发beforeValidate(),遗憾的是,将指定一个新的昵称并替换原来的昵称,因为beforeValidate()中的参数user现在是{age: 40}。
我所期望的是,beforeValidate(user, callback)中的参数beforeValidate(user, callback)应该更新user,将已更改和未更改的属性(例如,具有旧id、旧昵称和新时代的用户)结合在一起,而不是只修改我在User.update()中指定的属性(例如,只有{age: 40})。
我是不是误解了什么?
发布于 2016-11-15 18:14:04
在调用create()时,向beforeValidate传递添加新记录所需的所有值。然而,在调用update()时,只将更新的值传递给beforeValidate。这就是为什么您要将user.nickname作为空值。
请参阅http://sailsjs.org/documentation/concepts/models-and-orm/lifecycle-callbacks的文档。
创建的回调 beforeValidate: fn(值,cb) 更新的回调 beforeValidate: fn(valuesToUpdate,cb)
https://stackoverflow.com/questions/40525151
复制相似问题