如何解决在node / express的子文件/导入文件中未定义环境变量
我在我的node / express项目中使用 dotenv 软件包。
我有一个根目录/索引文件,我正在导入其他文件。
我仅在索引文件中导入了dotenv。在索引文件环境变量中可以访问这些变量,但是在导入的文件中不能访问它们。 如何使它在indes.js中导入的其他文件中可访问?
以下是我的代码
index.js
import dotenv from "dotenv";
dotenv.config();
import { sync,getImages,downloadImage } from "./api/controllers/shutterstock";
console.log(process.env.SHUTTERSTOCK_ACCESS_TOKEN); //===>Working gives me the access token
api / controllers / shutterstock.js
console.log(process.env.SHUTTERSTOCK_ACCESS_TOKEN); //===>undefined
解决方法
您的 index.js import
正在 api / controllers / shutterstock.js 中,并且导入已“悬挂”(在开始之前先评估所有依赖项)导入模块的执行),这会导致在导入后的console.log
在 执行之前dotenv.config()
进行评估并加载了.env
文件。>
您可以通过以下几种方法解决此问题:
-
不要立即访问 shutterstock.js 的顶级模块范围中的
process.env
,但例如仅在downloadImage
函数内部。如果您在downloadImage()
之后致电dotenv.config()
,它将可以使用。 -
将 shutterstock.js 的加载推迟到dotenv初始化之后:
import dotenv from "dotenv"; dotenv.config(); const { sync,getImages,downloadImage } = await import("./api/controllers/shutterstock");
-
导入一个模块,该模块在 shutterstock.js 模块之前执行
dotenv.config()
调用-依序加载和评估依赖项。已经Dotenv comes with such a module:import "dotenv/config"; import { sync,downloadImage } from "./api/controllers/shutterstock";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。