首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化迁移失败,原因是无法读取未定义的属性“”toString“”

序列化迁移失败,原因是无法读取未定义的属性“”toString“”
EN

Stack Overflow用户
提问于 2017-09-04 17:58:12
回答 3查看 13.5K关注 0票数 14

当我尝试在Sequelize上运行迁移时,我得到了以下错误;

代码语言:javascript
复制
== 20170904085107-kognitio-queue: migrating =======
TypeError: Cannot read property 'toString' of undefined
    at Object.attributeToSQL (/home/vagrant/insights-api/node_modules/sequelize/lib/dialects/mysql/query-generator.js:240:34)
    at Object.attributesToSQL (/home/vagrant/insights-api/node_modules/sequelize/lib/dialects/mysql/query-generator.js:306:45)
    at QueryInterface.createTable (/home/vagrant/insights-api/node_modules/sequelize/lib/query-interface.js:171:38)
    at Object.up (/home/vagrant/insights-api/lib/migrations/20170904085107-kognitio-queue.js:4:31)
    at constructor._exec (/home/vagrant/insights-api/node_modules/umzug/lib/migration.js:104:23)
    at constructor.up (/home/vagrant/insights-api/node_modules/umzug/lib/migration.js:69:17)
    at constructor.<anonymous> (/home/vagrant/insights-api/node_modules/umzug/index.js:124:28)
    at PassThroughHandlerContext.finallyHandler (/home/vagrant/insights-api/node_modules/bluebird/js/release/finally.js:57:23)
    at PassThroughHandlerContext.tryCatcher (/home/vagrant/insights-api/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/home/vagrant/insights-api/node_modules/bluebird/js/release/promise.js:524:17)

迁移文件如下;

代码语言:javascript
复制
'use strict';
module.exports = {
    up: function(queryInterface, Sequelize) {
        return queryInterface.createTable('Kognitio_Queue', {
            queue_id: {
                allowNull: false,
                primaryKey: true,
                type: Sequelize.INTEGER
            },
            queue_user: {
                allowNull: false,
                type: Sequelize.STRING(20)
            },
            queue_query: {
                allowNull: false,
                type: Sequelize.LONG
            },
            queue_added: {
                allowNull: false,
                type: Sequelize.DATETIME,
                defaultValue: Sequelize.NOW
            },
            queue_executed: {
                allowNull: true,
                type: Sequelize.DATETIME
            },
            queue_save_results: {
                allowNull: false,
                type: Sequelize.BOOLEAN
            },
            queue_results_path: {
                allowNull: true,
                type: Sequelize.TEXT
            }
        });
    },
    down: function(queryInterface, Sequelize) {
        return queryInterface.dropTable('Kognitio_Queue');
    }
};

我的模型文件是;

代码语言:javascript
复制
module.exports = (sequelize, DataTypes) => {
    const Kognitio_Queue = sequelize.define('Kognitio_Queue', {
        queue_id: {
            type: DataTypes.INTEGER,
            allowNull: false,
            primaryKey: true,
        },
        queue_user: {
            type: DataTypes.STRING(20),
            allowNull: false
        },
        queue_query: {
            allowNull: false,
            type: DataTypes.LONG
        },
        queue_added: {
            allowNull: false,
            type: DataTypes.DATETIME
        },
        queue_executed: {
            allowNull: true,
            type: DataTypes.DATETIME
        },
        queue_save_results: {
            allowNull: false,
            type: DataTypes.BOOLEAN
        },
        queue_results_path: {
            allowNull: true,
            type: DataTypes.TEXT
        }
    }, {
        underscored: true,
        freezeTableName: true
    });
    return Kognitio_Queue;
};

我对可能导致此错误发生的原因感到困惑,因为我已经将这些文件与其他成功运行的迁移进行了比较,并且看不到它们之间的差异。我已经清除了整个数据库并进行了迁移,但这是唯一失败的一个。

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-09-04 22:25:25

弄清楚这是无法识别的数据类型。

票数 42
EN

Stack Overflow用户

发布于 2018-12-23 06:17:56

确保使用大写数据类型:

使用日期而不是日期或日期

票数 14
EN

Stack Overflow用户

发布于 2018-07-02 14:38:24

DATETIME 更改为DATE,sequelize中没有名为DATETIME的数据类型。DATE的工作方式与DATETIME相同,而DATEONLY的工作方式类似于DATE Details:http://docs.sequelizejs.com/variable/index.html

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46034605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档