Node.js Sequelize CLI 无法切换数据库运行环境问题求助
问题根本原因
sequelize-cli 执行迁移、种子类操作时,不会加载项目中models/index.js的配置逻辑,也不会自动读取.env文件,默认固定使用development作为运行环境,和业务代码的环境变量配置是两套独立逻辑,因此你修改models/index.js里的环境变量不会生效。
可用解决方案
方案1:执行命令时手动指定环境(无需修改配置,推荐临时切换用)
执行sequelize-cli相关命令时追加--env参数指定目标环境即可,比如运行test环境的迁移:
切换生产环境将参数值改为npx sequelize-cli db:migrate --env testproduction即可。方案2:配置sequelize-cli自动读取.env的环境变量(长期使用推荐)
- 将
config/config.json重命名为config/config.js,修改内容为以下格式,手动加载dotenv:
require('dotenv').config() module.exports = { "test": { "username": "teste", "password": "123123123", "database": "question_test", "host": "localhost", "dialect": "mysql" }, "development": { "username": "teste", "password": "123123123", "database": "question_development", "host": "localhost", "dialect": "mysql" }, "production": { "username": "teste", "password": "123123123", "database": "question_production", "host": "localhost", "dialect": "mysql" } }- 如果项目根目录存在
.sequelizerc配置文件,确认config路径指向修改后的js文件:
配置完成后,修改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') };.env里的NODE_ENV即可直接控制sequelize-cli的运行环境。- 将
额外注意点
你当前.env文件里NODE_ENV='test'的写法存在问题:dotenv默认会把单引号也解析为值的一部分,最终读取到的process.env.NODE_ENV是带单引号的'test',无法匹配config里的test键,也会导致命中默认的development环境,修改为NODE_ENV=test即可,不要加任何引号。
内容的提问来源于stack exchange,提问作者Henrique
相关产品推荐
相关产品推荐

