Javascript 在Nodejs Sequelize模型中,如何获取属性的类型信息?
我在Javascript 在Nodejs Sequelize模型中,如何获取属性的类型信息?,javascript,node.js,postgresql,sequelize.js,Javascript,Node.js,Postgresql,Sequelize.js,我在NodeJS中有一个带有Postgres和sequelize的工作模型。假设模型是Person,并且有name和age字段。现在我想动态地检查模型类,并获取有关其属性的信息,比如它们的名称和大多数类型 使用Person.attributes 我得到一些信息: name: { type: { options: [Object], _binary: undefined, _length: 255 }, 但是,正如您所看到的,类型对象并不表示名称是varchar或布尔值 有人
NodeJS
中有一个带有Postgres
和sequelize
的工作模型。假设模型是Person
,并且有name
和age
字段。现在我想动态地检查模型类,并获取有关其属性的信息,比如它们的名称和大多数类型
使用Person.attributes
我得到一些信息:
name:
{ type:
{ options: [Object],
_binary: undefined,
_length: 255 },
但是,正如您所看到的,类型
对象并不表示名称
是varchar
或布尔值
有人知道如何使用sequelize获取此信息吗?似乎您正在查找本机类型信息 我不熟悉Sequelize,但我知道它在下面使用
节点postgres
驱动程序,它会自动为您进行的每个查询提供类型信息
下面是一个简单的动态获取任何表的类型详细信息的示例,使用:
每个列都有几个可用字段,包括您要查找的name
和dataTypeID
)
作为更新,在使用Sequelize的答案之后
不同之处在于,这里我们得到的是PostgreSQL提供的直接原始值,因此dataTypeID
是原始类型Id,与PostgreSQL支持的类型完全相同,而type:STRING
是Sequelize实现的解释类型。此外,我们在这里动态地获取类型详细信息,而不是在Sequelize示例中静态地获取类型详细信息。您可以迭代模型的rawAtributes
for( let key in Model.rawAttributes ){
console.log('Field: ', key); // this is name of the field
console.log('Type: ', Model.rawAttributes[key].type.key); // Sequelize type of field
}
因此,name
作为Sequelize.STRING
的示例如下
Field: name
Type: STRING
或者您可以执行几乎相同的迭代,但使用Model.rawtattributes[key].type.key
您可以使用Model.rawtattributes[key].type.toSql()
,这将生成此结果
Field: name
Type: VARCHAR(255)
编辑
访问字段的defaultValue
:
Model.rawtattributes[field].defaultValue
检查字段是否允许NULL
值:
Model.rawtattributes[field].allowNull
item.rawtattributes[key].type.key==this.DataTypes.JSONB.key;
@上述比较是否有效?
(很抱歉在这里写信,因为我无法添加评论)作者在问题中强调,他希望动态地获得它。如果我没弄错的话,这是一种静态的方法。他还问如何通过sequelize获得这些信息。让他选择最适合自己需要的方式,好吗?我相信最有价值的事情是能够自动检测静态模型何时过时,需要刷新。我很满意。非常感谢你。行中的下一个问题:如何获取默认值以及列是否可以为空?我编辑了答案,以显示如何访问字段的defaultValue
和allowNull
。此处有任何进展吗?您应该使用注释。请删除你的帖子
Field: name
Type: VARCHAR(255)