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

问题描述 投票:3回答:2

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

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

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

javascript node.js sails.js waterline
2个回答
3
投票

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

UPDATE

嗯......好像第一个参数不是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;
  }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.