如何在Sequelize ORM中添加一个自定义的数据types

我想通过inheritance现有DataType.Integer所有默认行为在Sequelize定义自定义数据types。 这里的基本思想是定义一个新的types并覆盖valueOftoString方法。

Sequelize文档不包含与此主题相关的任何信息。 如果有人可以帮助我,这将是非常好的。

https://github.com/sequelize/sequelize/blob/master/lib/data-types.js包含续集数据types。

具体来说, https://github.com/sequelize/sequelize/blob/master/lib/data-types.js#L251-L273显示DataTypes.INTEGER如何使用NUMBER.inherits(fn)从DataTypes.NUMBERinheritance。

那些从ABSTRACTinheritance。 您可以覆盖inheritance的数据types的toString()方法,如https://github.com/sequelize/sequelize/blob/master/lib/data-types.js#L62-L64所示 。

免责声明:由于未被公开logging,我不确定API的稳定性,因未来可能发生的变化而谨慎。

要在Sequelize中扩展数据types:

 class DataTypes_IP extends DataTypes.ABSTRACT { constructor () { super() this.key = 'IP' } toSql() { return 'VARBINARY(16)' } // Todo validate (value) { // const Validator = require('./utils/validator-extras').validator // if (!Validator.isDate(String(value))) { // throw new sequelizeErrors.ValidationError(util.format('%j is not a valid date', value)) // } return true } _sanitize (value) { return new IP(value) } _isChanged (value, originalValue) { if (value === originalValue) return false if ( value instanceof IP && originalValue instanceof IP && value.toBuffer().equals(originalValue.toBuffer()) ) { return false } return true } _stringify (ip) { return ip.toBuffer() } } 

并扩展了数据types

 DataTypes.IP = DataTypes_IP 

你可以在github中检查相关的问题。 https://github.com/sequelize/sequelize/issues/8533