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)