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

已安装dotenv但.env变量未定义:仅index.js可读取其他文件不行

Node.js .env变量仅主文件可用,其他模块无法读取的解决方案

问题核心

已安装dotenv模块,index.js可正常读取.env变量,但auth.js等路由模块中process.env对应变量返回undefined;直接硬编码变量值则项目正常运行,重装dotenv无效。

问题根源及修复步骤

1. 环境变量名不匹配

你的.env文件中定义的是SEC_KEY = a,但auth.js中调用的是process.env.SECRET_KEY,变量名不一致导致无法读取。

修复方案:

  • 要么修改.env文件,将变量名改为SECRET_KEY = a;
  • 要么修改auth.js中的调用,改为process.env.SEC_KEY。

2. dotenv加载顺序错误

index.js中先引入了authRoute等路由模块,之后才调用dotenv.config()。模块引入是同步执行的,这意味着auth.js在加载时,dotenv还未完成环境变量的注入,自然无法读取到值。

修复方案:
将dotenv的引入和配置代码放到所有模块引入的最前面,确保环境变量先加载完成:

修改后的index.js:

const dotenv = require("dotenv");
// 先加载环境变量
dotenv.config();

const express = require("express");
const mongoose = require("mongoose");
const app = express();
const router = express.Router();
const port = process.env.PORT || 5000;
const userRoute = require('./routes/user');
const authRoute = require('./routes/auth');

mongoose.set('strictQuery', false);
mongoose
    .connect(process.env.MONGODB_URL)
    .then(() => console.log("Database is working"))
    .catch((err) => console.log(err));

app.use(express.json());
app.use('', authRoute);

app.listen(process.env.PORT, function () {
    console.log('Server is up on port ' + process.env.PORT)
})

额外排查点

  • 确保.env文件位于项目根目录,与index.js同级;
  • 检查dotenv版本,若版本过低可尝试更新到最新版:npm install dotenv@latest;
  • 若使用nodemon等工具,确保启动命令未覆盖环境变量加载逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:40:26