如何在Heroku上的Node.js应用程序中访问.env文件中的变量

3

我在名为.env的文件中声明了变量。

MONGOCONNECTIONSTRING=connectionstring

当我运行heroku local web时,它会显示

[OKAY] Loaded ENV .env File as KEY=VALUE Format

我试图像这样使用环境变量

const connectionString = process.env.MONGOCONNECTIONSTRING

在我的index.js文件中

当我尝试打印变量connectionstring时,它是未定义的。 我该如何访问这些变量。

Heroku的最佳实践建议这样做,但由于变量从未可用,我一定漏掉了什么。


你找到解决方案了吗?我也有同样的问题。 - Sydney
嘿,我做了。我想我使用了一个叫做dotenv的包。我会检查一下这个应用程序,并在几分钟内回复你。 - xerotolerant
2个回答

4

在Heroku上的通常做法是通过设置环境变量来配置您的应用程序,可以通过Heroku仪表板或CLI命令来完成。建议使用CLI,因为您可以一次性设置多个变量:

heroku config:set MONGOCONNECTIONSTRING=connectionstring

.env文件仅用于本地开发,不应将此文件提交到存储库。实际上,在您提供的文档中已经提到了这一点。

另外,我想知道您是否在Heroku上预配了MongoDB插件?如果是,它应该会自动设置适当的连接字符串。也许您应该查看相关文档。


web: node dist/index.js 这是唯一的内容,用于指向应用程序的启动文件。 - xerotolerant
你可以尝试输出所有的环境变量,看看是否有任何内容 console.log(process.env)。你也可以尝试使用 export MONGOCONNECTIONSTRING=connectionstring 导出这个变量,或者直接运行 MONGOCONNECTIONSTRING=connectionstring node dist/index.js - Michał Młoźniak
将 process.env 打印到控制台,可以显示我的 Windows 计算机的环境变量。我将其复制出来,但其中并不包含我在文件中输入的内容。我猜我可以把它放在 proc 文件中,但这样做不是有违拥有环境变量的目的吗?procfile 最终会进入我的版本控制。 - xerotolerant
我的意思是只在开发环境中导出,export 应该是最好的选择。我知道这并不能解决你的问题,但它应该可以让你在本地测试你的应用程序。 - Michał Młoźniak
好的,我会尝试导出。谢谢。我应该在哪里写这个导出语句? - xerotolerant
显示剩余3条评论

2
我找到了问题所在。 .env 文件没有使用 UTF-8 编码,因此解析错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接