我正在构建一个Node应用程序,该应用程序使用Google自定义搜索引擎(CSE)返回搜索结果。
我要将发送请求的应用程序部分分离到Google并将结果返回到模块中。
我已在应用中使用dotenv来存储MongoDB凭据和应用的网址。
我还想在模块中使用dotenv存储Google CSE ID和CSE的API密钥。
我希望我的模块独立于主应用程序工作,但是当它是模块时也要使用主应用程序的dotenv文件。
目前我的模块结构如下所示:
module
|
+-- node_modules
| |
| \-- dotenv
| |
| \-- (dotenv module's files....)
|
+-- .env
|
\-- index.js
这本身就很完美。 .env文件存储了所需的环境变量,我可以通过要求dotenv模块在index.js文件中访问它们。
当包含在主应用程序中时,结构如下所示:
app
|
+-- node_modules
| |
| +-- dotenv
| | |
| | \-- (dotenv module's files....)
| |
| \-- my_google_search_module
| |
| +-- node_modules
| | |
| | +-- dotenv
| | |
| | \-- (dotenv module's files...)
| |
| \-- index.js
|
+-- .env
|
\-- index.js
这也有效。我将所有环境变量存储在主应用程序的.env文件中,并在应用程序的index.js中要求dotenv我可以访问这些变量。另外,“my_google_search_module”似乎是从应用根目录中的.env文件中提取所需的变量。模块中没有.env文件。
我的问题是我这样做是正确的吗?
答案 0 :(得分:0)
我对此进行了进一步的研究,可以确认模块的.env
正在从应用的.env
文件中提取所需的环境变量。
我相信dotenv自述文件中的这一部分虽然不完全相关,但验证了 - https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set
我们永远不会修改任何已经存在的环境变量 组。特别是,如果你的.env文件中有一个变量 与您环境中已存在的那个碰撞,然后发生碰撞 变量将被跳过。此行为允许您覆盖所有 .env配置与机器特定的环境,虽然它 不推荐。
答案 1 :(得分:0)
是的,你正在以正确的方式做事。整个项目中必须有一个.env文件。但是有一个技巧可以将它包含在不同的目录结构中。 例如: 你的index.js文件在/ app / src中,你的.env文件在/ app中。你的index.js文件有这个
dotenv.config({path:“../。env”});
你也可以使用dotenv.config({path:path.join(__ dirname,“.. /。env”)});
答案 2 :(得分:0)
对于节点项目,我建议使用npm软件包dotenv。您可以找到有关如何使用它的详细信息。不要忘记在项目文件的开头(例如index.js)包含require('dotenv').config()
。
现在,您可以在需要的任何地方使用.env
内容。例如,我希望服务器端口为4000,我在.env
中将其定义为PORT=4000
。现在,要在任何地方使用.env
变量,只需在后缀中提供变量名,例如process.env.PORT
。这就对了。尽管我在这篇文章上迟到了,但希望对您有所帮助。