Sequelize获得虚拟领域

时间:2015-02-12 16:36:39

标签: javascript node.js sequelize.js

出于同步原因我想创建一行某些字段的哈希作为虚拟字段。

我的续集模型看起来像这样:

var crypto = require('crypto');

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('transactions', { 
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true
    },
    randomfieldone: {
      type: DataTypes.BIGINT,
      allowNull: true,
    },
    randomfieldtwo: {
      type: 'NUMERIC',
      allowNull: false,
    },
    hash: {
      type: DataTypes.VIRTUAL,
      set: function (val) {
        var string = this.randomfieldone+''+this.randomfieldtwo;
        var hash = crypto.createHash('md5');
        hash.update(string);
        hash.digest('hex');
        this.setDataValue('hash', hash);
     }
    }
  },{
    timestamps: false
  });
};

当我尝试输出时,我得到了#undefined'。

我希望能像其他任何真正的'一样访问它。字段。

console.log(row.hash)  

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

我正在使用

hash: {
  type: DataTypes.VIRTUAL,
  set: function (val) {
    var string = this.get("randomfieldone")+''+this.get("randomfieldtwo");
    var hash = crypto.createHash('md5');
    hash.update(string);
    hash.digest('hex');
    this.setDataValue('hash', hash);
 }
}

答案 1 :(得分:0)

好的,我解决了它:

var md5 = require('MD5');

getterMethods: {
        hash: function () {
          var string =  this.id+''+this.randomfieldone +''+this.randomfieldtwo;
          var hash = md5(string);
          return hash;
        }
    }

答案 2 :(得分:0)

如果为模式中的属性设置getter函数,则在将实例转换为object或json时将包含该属性。