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

Can we change the value of attribute on after/before Create() callback in sails?

本文关键字:改变 属性 之后 Create 回调 我们      更新时间:2023-09-26

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

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

activation_link的修改值也必须保存在数据库中。如何实现这一目标?

根据这个和这个你的代码应该实际工作:你在afterCreate中的操作应该改变结果对象。

嗯…似乎第一个参数不是水线对象,尽管文档说。从技术上讲,您可以通过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;
  }
}

afterCreatebeforeCreate的变化(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();
  }

文档在这里官方风帆模型生命周期