NodeJS db-migrate TypeError:无法读取null的属性"1"

cav*_*llo 4 dbmigrate node.js npm

我刚刚将nodejs包db-migrate安装到现有的nodejs项目中.似乎在与DB的连接方面正确配置了所有内容.

Database.json:

{
    "development": "postgres://blabla",
    "production": "postgres://blabla"
}
Run Code Online (Sandbox Code Playgroud)

移民:

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);
};
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行时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)
Run Code Online (Sandbox Code Playgroud)

我已经尝试重命名表,更改字段,搞乱CRLF行结尾,安装不同版本的nodejs和db-migrate等.

有任何想法吗?

cav*_*llo 8

大约一个小时的圈子运行后,我意识到迁移的名称不正确.它的第一部分只指定日期而不是时间.要使用的文件名格式正确yyyyMMddhhmmss-<some text>.

之前(坏): 20160101-testmigration

之后(好): 20160101000000-testmigration

错误本来可以更明确......

编辑:

正如@ 2Toad所指出的那样,必须要小心存储在应该找到迁移的文件夹中的内容.如果您有任何*.js不遵循命名格式的文件,如帮助程序JS文件,则会发生相同的错误.

  • 可能想检查由migrations文件夹中的IDE / OS创建的临时/备份/系统文件。在我的情况下,我向迁移文件夹添加了一个辅助库,以为db-migrate仅会提取与db-migrate命名约定“ YYYYMMDDHHmmss- {NAME} .js”匹配的文件。显然不是这样。db-migrate将尝试解析migrations文件夹中的所有* .js文件 (2认同)