node.js - Sequelize 模型中的继承

标签 node.js inheritance sequelize.js

我有一些非常常见的领域。 (CreatedBy, CreatedDate, LastUpdatedBy, LastUpdatedDate)

当我创建模型时,有什么方法可以在我的模型中继承这些属性?

我查看了 sequelize docs 。但在那里找不到任何相关的东西。

目前,我正在创建的每个模型中指定这些属性:

const Sequelize = require('sequelize');
const conn = require('../common/mssql-connection');

const Member = conn.define('Member', {
  id: {
    type: Sequelize.INTEGER,
    field: "Id",
    autoIncrement: true,
    primaryKey: true
  },
  name: {
    type: Sequelize.STRING,
    field: "Name"
  },//Everything below this line is repetitive in other models. Inheritance would be useful here.
  createdDate: {
    type: Sequelize.DATE,
    field: "CreatedDate"
  },
  createdBy: {
    type: Sequelize.STRING,
    field: "CreatedBy"
  },
  lastUpdatedDate: {
    type: Sequelize.DATE,
    field: "LastUpdatedDate"
  },
  lastUpdatedBy: {
    type: Sequelize.STRING,
    field: "LastUpdatedBy"
  }
})

module.exports = Member;

最佳答案

我也没有设法找到“标准”方式,但是您可以拦截 Sequelize 构造函数的原始定义函数,处理您的默认字段:

 const originalDefine =  Sequelize.prototype.define; 

 Sequelize.prototype.define = function(tableName,fields){
    return originalDefine.call(this,tableName, {
          createdBy: { type: Sequelize.DataTypes.STRING,defaultValue:"default 'createdBy' value!!!!" },
           ...fields   
     })
 }

然后创建您的 Sequelize 实例..
const sequelize = new Sequelize(...)

关于node.js - Sequelize 模型中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60863888/

相关文章:

node.js - 无法通过浏览器访问 mongodb - 看起来您正试图在 native 驱动程序端口上通过 HTTP 访问 MongoDB

arrays - Joi 验证正则表达式或模式

java - 如何找到两个非接口(interface)类的最近公共(public)父类(super class)

c# - 操作系统设计问题 : File types associated with their appropriate programs

mysql - Sequelize Node.js 新功能在创建多对多关系后不起作用

node.js - 以编译形式部署node.js

node.js - 使用phonegap/cordova时,“node”不被识别为内部或外部命令、可操作程序或批处理文件

java - Java 中的隐式继承

mysql - 在 Sequelize 中创建包含与 hasOne 关联的行

node.js - 需要在 Material 数据表中显示嵌套的 JSON 对象