NodeJS数据库迁移(db-migrate)TypeError:无法读取null的属性“1”。

10

我刚刚将nodejs软件包db-migrate安装到一个现有的nodejs项目中。就连接到数据库而言,一切似乎都已正确配置。

Database.json:

{
    "development": "postgres://blabla",
    "production": "postgres://blabla"
}

迁移:

var dbm = global.dbm || require('db-migrate');
var type = dbm.dataType;

exports.up = function(db, callback) {
    db.createTable('users', {
        id: { type: 'int', primaryKey: true, autoIncrement: true },
        username: { type: 'string', unique: true }
        }, callback);
};

exports.down = function(db, callback) {
    db.dropTable('users', callback);
};
无论我尝试在任何参数变形下运行 db-migrate up,例如指定数据库文件、迁移、迁移数量等,该命令每次都会引发错误:

每当我尝试运行db-migrate up(无论是指定数据库文件、迁移、迁移数量等的任何变体),该命令每次都会引发错误:

[ERROR] TypeError: Cannot read property '1' of null
   at Class.extend.parseName (C:\Users\test\Projects\nodejs\cirio-crm\node_modules\db-migrate\lib\skeleton.js:162:17)
   at Class.Skeleton.extend.init (C:\Users\test\Projects\nodejs\cirio-crm\node_modules\db-migrate\lib\migration.js:35:24)
   at Class.prototype.(anonymous function) [as init] (C:\Users\test\Projects\nodejs\cirio-crm\node_modules\db-migrate\lib\class.js:36:24)
   at new Class (C:\Users\test\Projects\nodejs\cirio-crm\node_modules\db-migrate\lib\class.js:49:17)
   at C:\Users\test\Projects\nodejs\cirio-crm\node_modules\db-migrate\lib\migration.js:312:14
   at Array.map (native)
   at C:\Users\test\Projects\nodejs\cirio-crm\node_modules\db-migrate\lib\migration.js:311:35
   at FSReqWrap.oncomplete (fs.js:95:15)

我已尝试更改表格名称、更改字段、调整CRLF行结尾、安装不同版本的nodejs和db-migrate等。

有任何想法吗?

1个回答

20

大约跑了一个小时的循环后,我意识到迁移文件名没有正确命名。它的第一部分只指定了日期而没有时间。应该使用正确的文件名格式:yyyyMMddhhmmss-<一些文本>

之前(错误):20160101-testmigration

之后(正确):20160101000000-testmigration

不过错误信息可以更加明确...

编辑:

如@2Toad所指出的,必须小心存储在迁移文件夹中的内容。如果你有任何不遵循命名格式的*.js文件,比如帮助JS文件,同样会出现相同的错误。


请你能否明确一下你具体改了什么。我遇到了同样的问题,但是我没有任何叫这个名字的迁移文件。 - Umakant Patil
1
@UmakantPatil 我所做的只是按照以下格式命名迁移:yyyyMMddhhmmss-<一些文本> - cavpollo
2
可能需要检查迁移文件夹中IDE/OS创建的临时/备份/系统文件。在我的情况下,我已经将一个帮助库添加到迁移文件夹中,认为db-migrate只会拉取与db-migrate命名约定匹配的文件:YYYYMMDDHHmmss-{NAME}.js。显然,事实并非如此。db-migrate将尝试解析迁移文件夹中的所有*.js文件。 - 2Toad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接