如何扩展 Sequelize 模型?

新手上路,请多包涵

有没有一种方法可以使用一个基类,它具有我的模型的所有公共属性和方法,但不与数据库表链接,然后我可以在定义新模型时扩展这个基类。

在这里,我在 node express 中创建了基本的人员模型。我需要从基类扩展 person 类。

 const person = sequelizeClient.define('person', {
    name: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {
    hooks: {
      beforeCount(options) {
        options.raw = true;
      }
    }
  });

  const base = sequelizeClient.define('base', {
    id: {
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true
    },
    createdBy: {
      type: Sequelize.INTEGER,
    },
    updatedBy: {
      type: Sequelize.INTEGER,
    },
    deletedBy: {
      type: Sequelize.INTEGER,
    }
  }, {
    hooks: {
      beforeCount(options) {
        options.raw = true;
      }
    }
  });

在文档中指出

Sequelize 模型是 ES6 类。您可以非常轻松地添加自定义实例或类级别的方法。

我如何使用 ES6 扩展类模式来做到这一点?

有一个类似的问题,但最近没有更新。 如何扩展 Sequelize 模型

原文由 v1shva 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 362
1 个回答

我如何使用 ES6 扩展类模式来做到这一点?

Sequelize 文档中的声明对开发人员来说有点混乱。这并不意味着您可以使用 ES6 类语法扩展定义的模型,如下所示。

 const User = db.define('User', {
  name: sequelize.STRING,
  age: sequelize.INTEGER
});

// This is impossible.
class Staff extends User {
  ...
}

但是您可以通过访问原型来定义实例方法,如下所示。

 const User = db.define('User', {
  name: sequelize.STRING,
  age: sequelize.INTEGER
});

User.Instance.prototype.test = function() {
  return `Name: ${this.name}, Age: ${this.age}`
}

User.create({ name: "John", age: 10 });
User.findOne().then((user) => {
  console.log(user.test()) // "Name: John, Age: 10"
});

你在 Sequelize 文档中提到的声明实际上是说你可以使用 基于原型的 扩展来增强模型行为,所以你不能做你在问题中尝试做的模型继承之类的事情。

这样 Sequelize中关于ES6类语法实现方案的讨论很多,但看起来还在讨论中。

原文由 IzumiSy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题