You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize迁移无法读取dotenv变量,数据库连接被拒绝求助

解决Sequelize-CLI迁移时无法读取dotenv环境变量的问题

我之前也碰到过一模一样的情况——用nodemon启动服务器时数据库连接完全正常,一跑npx sequelize-cli db:migrate就报connect ECONNREFUSED 127.0.0.1:3306,本质原因就是Sequelize-CLI执行迁移命令时,没有正确加载你的dotenv环境变量,导致config.js里的process.env.xxx全是undefined,只能用默认配置去连数据库,自然就失败了。

给你几个实用的解决方案,按需选择:

方案1:修改config.js,确保dotenv加载正确路径

大概率是你的config.js放在config/目录下,而.env文件在项目根目录,默认的dotenv.config()会从当前脚本所在目录查找.env,所以找不到。修改config.js的开头部分,指定.env的绝对路径即可:

const path = require('path');
// 从config目录向上定位到项目根目录的.env文件
require("dotenv").config({ path: path.resolve(__dirname, '../.env') });

module.exports = {
  // 你的原有配置内容...
};

这样不管是sequelize-cli执行迁移,还是nodemon启动服务,都能正确读取到.env里的变量。

方案2:用dotenv-cli在命令行注入环境变量

如果不想修改代码,可以借助dotenv-cli工具,先安装它:

npm install dotenv-cli --save-dev

然后在执行迁移命令前加上dotenv-cli的前缀:

npx dotenv-cli sequelize-cli db:migrate

它会自动加载项目根目录的.env文件,把环境变量注入到sequelize-cli的执行环境中。

方案3:在package.json中添加自定义脚本(最推荐)

为了避免每次都敲长命令,直接在package.json的scripts里配置快捷命令:

{
  "scripts": {
    "db:migrate": "dotenv-cli sequelize-cli db:migrate",
    "db:migrate:undo": "dotenv-cli sequelize-cli db:migrate:undo",
    "db:seed": "dotenv-cli sequelize-cli db:seed:all"
  }
}

之后执行迁移只需要敲:

npm run db:migrate

既方便又不容易出错。

顺便解释下为什么nodemon没问题:你用nodemon启动的是服务器入口文件(比如app.js或server.js),这个入口文件里肯定已经正确加载了dotenv,所以整个服务进程的process.env是有效的;但sequelize-cli是直接执行你的config.js,若config.js里的dotenv加载路径不对,自然拿不到环境变量。

内容的提问来源于stack exchange,提问作者byyoung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:07:26