使用config.js配置Sequelize运行迁移提示需显式指定Dialect求助
问题解决方法
你的报错是3个配置问题共同导致的,按以下步骤依次修复即可:
1. 修正config.js的结构适配sequelize-cli读取规则
sequelize-cli默认读取环境配置的顶级dialect字段,你当前把development环境的dialect、host嵌套在了options属性下,cli无法识别就会抛出方言未指定的错误。
修正后的config.js的development配置段:
development: { database: DB_NAME, username: DB_USER, password: DB_PASSWORD, port: DB_PORT, host: DB_HOST, dialect: DB_DIALECT, // 如果你原有业务代码需要用到options可以保留,不影响cli读取 options: { host: DB_HOST, dialect: DB_DIALECT }, },
2. 新增sequelize-cli自定义配置文件
sequelize-cli默认读取根目录下的config/config.json,要让它识别js格式的配置文件,需要在项目根目录新建.sequelizerc文件,内容如下:
// 提前加载.env变量,避免cli读取config时环境变量为空 require('dotenv').config(); const path = require('path'); module.exports = { 'config': path.resolve('config', 'config.js'), 'models-path': path.resolve('models'), 'seeders-path': path.resolve('seeders'), 'migrations-path': path.resolve('migrations'), };
3. 修正models/index.js的config导入路径
你当前在models文件夹下的index.js中用require('./config/config')[env]引入配置,相对路径指向的是不存在的models/config/config.js,实际你的config文件夹在项目根目录,需要修正为:
const config = require('../config/config')[env];
同时统一配置结构后,你可以把sequelize初始化代码改回官方默认写法,避免后续参数不匹配:
sequelize = new Sequelize(config.database, config.username, config.password, config);
全部修改完成后,重新运行npx sequelize-cli db:migrate即可正常执行迁移。
内容的提问来源于stack exchange,提问作者Oyedele Femi
相关产品推荐
相关产品推荐

