将默认值设置为模型(Sails.js)

时间:2016-11-06 00:45:53

标签: node.js sails.js waterlock

我开始学习Sails.js,我想知道是否有更简单的方法从会话变量设置模型中的默认值?我正在使用 Waterlock 进行身份验证,并在req.session.user_id等会话变量中设置user_id。我有一个消息模型,我想将'from'字段默认为此会话变量。有没有办法在Sails.js中执行此操作?

1 个答案:

答案 0 :(得分:0)

如果您使用Sail的默认ORM, Waterline ,则模型属性具有 defaultsTo 选项。提供的值可以是函数。您可以查看waterline documentation

样本模型

module.exports = {
  attributes: {
    description: {
      type: 'string',
      defaultsTo: 'No description.'
    },
    email: {
      type: 'email',
      required: true,
      unique: true
    },
    alias: {
      type: 'string',
      defaultsTo: function(){
        return this.email;
      }
    },
  }
};

如果提供的值是函数,则对此函数的调用将绑定到create中的值。

对于Model.create(values)...,如果别名为null / undefined,则alias = defaultsTo.call(values)用于获取别名的值。

因此,要使用req.session.user_id,您可能必须在创建期间包含它。 Model.create({session: req.session,...})。我不太确定,因为我不使用Waterlock。而且我并不认为这是最好的方法。

根据我的经验,在使用 sails-mysql 等适配器时会忽略这些额外值,但如果您使用 sails-disk 进行开发,那么您可能会看到这些额外的值是持久的。您可能希望在保留之前删除它们。

  beforeCreate: function(values, cb){
    delete values['session'];
    cb();
  }