Discord.js配合forever服务端启动报错TOKEN_INVALID,process.env读取失效
问题根因
报错本质是dotenv未正确加载指定的配置文件,导致process.env.TOKEN为undefined,触发discord.js的TOKEN_INVALID错误。本地运行正常是因为本地执行node命令的工作目录与配置文件所在目录匹配,服务端用forever启动时工作目录不匹配,相对路径寻址失败。
排查步骤
- 加入调试代码确认加载状态:在
dotenv.config行后追加打印语句,确认文件是否加载成功:
console.log('当前工作目录:', process.cwd()) const loadResult = dotenv.config({ path: './process.env' }) console.log('env加载结果:', loadResult)
如果loadResult存在error字段,即可确认是配置文件路径错误导致读取失败。
- 确认配置文件存在性:检查服务端项目目录下是否存在
process.env文件,排除.gitignore规则过滤导致文件未上传的情况。
修复方案
方案1:改用绝对路径定位配置文件(推荐)
使用__dirname基于入口文件位置定位配置文件,不受启动时工作目录影响,修改加载代码如下:
const dotenv = require('dotenv'); const path = require('path'); // 以当前入口文件所在目录为基准寻址 dotenv.config({ path: path.join(__dirname, './process.env') }); const username = process.env.IGUSERNAME const password = process.env.IGPASSWORD const TOKEN = process.env.TOKEN // 前置校验避免无效启动 if (!TOKEN || typeof TOKEN !== 'string') { throw new Error('TOKEN加载失败,请检查env配置文件') } client.login(TOKEN);
方案2:启动forever时明确指定工作目录
先cd到项目根目录(即process.env文件所在目录)后再执行启动命令:
cd /你的/项目/根目录/绝对路径 forever start ig.js
也可以直接通过--workingDir参数指定工作目录:
forever --workingDir /你的/项目/根目录/绝对路径 start ig.js
方案3:优化配置文件命名(可选)
dotenv默认自动加载项目根目录下的.env文件,你当前使用process.env作为文件名容易和node全局process.env变量混淆,建议重命名配置文件为.env,修改后dotenv.config()无需指定path参数即可自动加载,降低出错概率。
内容的提问来源于stack exchange,提问作者RasmonT
相关产品推荐
相关产品推荐

