我们可以在sails中的Create()回调之后/之前更改属性的值吗?

时间:2014-06-05 12:13:42

标签: javascript node.js sails.js waterline

我有一个场景,我必须用它的id填充模型的属性。例如...... 在用户模型中:

module.exports = {
attributes: {
    activation_link: "string"
},
 afterCreate: function(value, cb) {
    value.activation_link = "localhost:1337/user/action/"+ value.id;
    cb();
}

activation_link的修改值也必须保存在数据库中。怎么能实现呢?

2 个答案:

答案 0 :(得分:3)

根据thisthis您的代码实际上应该有效:afterCreate中的操作应该改变生成的对象。

<强>更新

嗯......似乎第一个参数不是Waterline对象,尽管有what the documentation says。从技术上讲,你可以通过id从DB重新获取记录,更新和保存,而不需要很多开销(因为它应该只在创建时被调用一次)。但我真的会避免在数据库中放入依赖于记录ID的字段:这样的数据库变得不可传输,因为您无法保证记录具有相同的ID。因此,解决方案是使用一些令牌来处理这些激活链接(干净的方式),或者只是将activation_link作为一个函数而不将其放入DB中(简单的方法):

module.exports = {
  attributes: {
  },
  activation_link: function() {
    if (!this.id)
      return false;

    return 'localhost:1337/user/action/' + this.id;
  }
}

答案 1 :(得分:0)

afterCreate更改为beforeCreate(sails -v 0.12.14)

beforeCreate: function (attrs, cb) {
    attrs.createdAt = moment().format()
    attrs.updatedAt = attrs.createdAt
    return cb();
  },

beforeUpdate: function (attrs, cb) {
    attrs.updatedAt = moment().format()
    return cb();
  }

此处记录offical sails model lifecycle