如何扩展Sequelize模型?

v1s*_*hva 11 javascript express sequelize.js ecmascript-6 feathersjs

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

在这里,我在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;
      }
    }
  });
Run Code Online (Sandbox Code Playgroud)

在文档中说明了这一点

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

我怎样才能使用ES6扩展类模式?

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

Izu*_*iSy 8

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

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

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

// This is impossible.
class Staff extends User {
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

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"
});
Run Code Online (Sandbox Code Playgroud)

您在 Sequelize doc 中提到的声明实际上是说您可以使用基于原型的扩展来增强模型行为,因此您无法执行您在问题中尝试执行的模型继承之类的操作。

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