sails.js中beforeValidate()的逻辑

时间:2016-11-10 10:21:52

标签: sails.js

我是sails.js的新手,经过一些工作,我发现beforeValidate()难以使用。

我的模型User只有2个属性nicknameage。 这两个属性都标记为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})。

我误解了什么吗?

1 个答案:

答案 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)