Discord.js机器人没有使用Heroku上线



我刚开始使用JS来编程一个机器人,使用Discord.JS和Heroku来托管

在Heroku上,构建成功,但不会上线。Heroku询问时我使用了dotenv

我使用npm安装了dotenv,这是我的dotenv:代码

require('dotenv').config();
console.log(process.env.DISCORD_TOKEN);

console.log(process.env.DISCORD_TOKEN)在控制台中返回undefined

这是我的.env文件:

DISCORD_TOKEN = OTI2M...

这就是我在代码中使用DISCORD_TOKEN的地方:

const token = process.env.DISCORD_TOKEN;
client.login(token);

本地的构建失败说:

Error [TOKEN_INVALID]: An invalid token was provided.

在Heroku上,它成功构建,但没有在本地使用node index.js

这是Heroku的控制台日志,我确信我在Heroku 中正确配置了env变量

-----> Building on the Heroku-20 stack
-----> Using buildpack: heroku/nodejs
-----> Node.js app detected

-----> Creating runtime environment

NPM_CONFIG_LOGLEVEL=error
NODE_VERBOSE=false
NODE_ENV=production
NODE_MODULES_CACHE=true

-----> Installing binaries
engines.node (package.json):  unspecified
engines.npm (package.json):   unspecified (use default)

Resolving node version 14.x...
Downloading and installing node 14.18.2...
Using default npm version: 6.14.15

-----> Restoring cache
- node_modules

-----> Installing dependencies
Installing node modules (package.json)
audited 132 packages in 0.767s

18 packages are looking for funding
run `npm fund` for details

found 0 vulnerabilities


-----> Build

-----> Caching build
- node_modules

-----> Pruning devDependencies
audited 132 packages in 0.791s

18 packages are looking for funding
run `npm fund` for details

found 0 vulnerabilities


-----> Build succeeded!
-----> Discovering process types
Procfile declares types     -> worker
Default types for buildpack -> web
-----> Compressing...
Done: 69.7M
-----> Launching...
Released v15

我错过了什么?

当Heroku询问时,我使用dotenv

我不知道你说的是什么意思。Heroku没有这样的要求。在开发中使用它可能很方便,但Heroku使用config-vars进行配置。

好消息是,dotenv和config-var都做同样的事情:填充环境变量。引用process.env.DISCORD_TOKEN的代码读取DISCORD_TOKEN环境变量

您似乎缺少的唯一步骤是将DISCORD_TOKEN设置在Heroku一侧。您可以在命令行上设置Heroku配置变量,例如

heroku config:set DISCORD_TOKEN=some_token_value

或者使用基于web的仪表板。

请注意,您的.env文件不应在存储库中跟踪。这只是为了地方发展。