0

我在我的用户模型上定义了一个 getter 方法,就像这样,

'use strict';
module.exports = function(sequelize, DataTypes) {
  var Users = sequelize.define('Users', {
    name: DataTypes.STRING,
    uuid: {
      type: DataTypes.INTEGER, 
      allowNull: false, 
      primaryKey: true
    }, 
    poll_ids: DataTypes.ARRAY(DataTypes.INTEGER)
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
        Users.hasMany(models.Polls, {
          foreignKey: 'userId'
        });
      }
    }, 
    getterMethods: {
      getUUID() {
        return this.getDataValue('uuid');
      }
    }
  });
  return Users;
};

我试图像这样运行它,

models.Users.create({
        name: name, 
        uuid: uuid, 
        poll_ids: poll_ids
    }).then((user) => {
        console.log(user.getUUID());
    });

但是,当我这样做时出现以下错误。

未处理的拒绝类型错误:user.getUUID 不是函数

注意:我已经使用 sequelize-cli 定义了我的模型和迁移。迁移后,我将 getterMethods 添加到模型文件中。我运行了撤消迁移,同步数据库并再次迁移以确保迁移文件反映了对我的模型的更改。但是,我不确定这是对迁移文件进行更新的方法。我哪里错了?

4

2 回答 2

0

我已经有一段时间没有在文档中看到它了,但是定义instanceMethods似乎适用于您想要实现的目标getUUID()

替换getterMethods:instanceMethods,您应该能够访问模型.getUUID(的实例Users

于 2017-05-23T04:46:22.883 回答
0

好吧,终于有事干了。将其定义为模型的一部分不起作用,但出于某种原因将其定义为属性的一部分是可行的。

module.exports = function(sequelize, DataTypes) {
  var Users = sequelize.define('Users', {
    name: DataTypes.STRING,
    uuid: {
      type: DataTypes.INTEGER, 
      allowNull: false, 
      primaryKey: true, 
      get() {
        return this.getDataValue('uuid');
      }
    }, 
    poll_ids: DataTypes.ARRAY(DataTypes.INTEGER)
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
        Users.hasMany(models.Polls, {
          foreignKey: 'userId'
        });
      }
    }
  });
  return Users;
};

在路由文件中

models.Users.create({
        name: name, 
        uuid: uuid, 
        poll_ids: poll_ids
    }).then((user) => {
        console.log('Finally');
        console.log(user.get('uuid'));
    });
于 2017-05-21T21:36:05.640 回答