在Nodejs Sequelize模型中,如何获取属性的类型信息?

时间:2017-03-02 02:13:37

标签: javascript node.js postgresql sequelize.js

我在Postgres中有sequelizeNodeJS的工作模型。假设模型为Person并且具有nameage字段。现在我想动态检查模型类并获取有关它的属性的信息,比如它们的名称和大多数类型

使用Person.attributes 我得到了一些信息:

name:
{ type:
  { options: [Object],
    _binary: undefined,
    _length: 255 },

但正如您所看到的,type对象未通知namevarcharboolean

有谁知道,如何使用sequelize

获取此信息

3 个答案:

答案 0 :(得分:3)

您可以迭代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
}

因此nameSequelize.STRING的示例为

Field: name
Type: STRING

或者您可以执行几乎相同的迭代,但使用Model.rawAttributes[key].type.key,您可以使用Model.rawAttributes[key].type.toSql(),这将生成此结果

Field: name
Type: VARCHAR(255)

修改

访问defaultValue字段:

Model.rawAttributes[field].defaultValue

检查字段是否允许NULL值:

Model.rawAttributes[field].allowNull

答案 1 :(得分:0)

您正在寻找原生类型信息。

我不熟悉Sequelize,除了我知道它下面使用node-postgres驱动程序,它会自动为您提出的每个查询提供类型信息。

以下是动态使用pg-promise获取any_table的类型详细信息的简单示例:

var pgp = require('pg-promise')(/*initialization options*/);
var db = pgp(/*connection details*/);

db.result('SELECT * FROM any_table LIMIT 0', [], a => a.fields)
    .then(fields => {
        // complete details for each column 
    })
    .catch(error => {
        // an error occurred
    });

每个列都有几个字段可供使用,包括您要查找的namedataTypeID;)

作为更新,按照确实使用Sequelize的答案......

不同之处在于,我们在这里得到了PostgreSQL提供的直接原始值,因此dataTypeID是原始类型Id,正如PostgreSQL支持它,而TYPE: STRING是由Sequelize实现的解释类型。此外,我们在这里动态获取类型详细信息,而不是静态地获取Sequelize示例。

答案 2 :(得分:0)

item.rawAttributes [key] .type.key === this.DataTypes.JSONB.key; @piotrbienias以上比较是否有效? (很抱歉在这里写,因为我无法添加评论)