当前位置: 首页 > 后端技术 > Node.js

精读《如何在 nodejs 使用环境变量》

时间:2023-04-04 00:03:26 Node.js

1简介本期精读文章为:如何在nodejs中使用环境变量。描述如何在开发和生产环境中管理环境变量。这里的环境变量指的是数据库密码等重要数据,而不是普通的变量参数。2概述环境变量有着悠久的历史。在运行第一行JAVA代码之前,您必须设置环境变量。但是问题是系统变量不好用,比如末尾要不要用分号,JAVA_HOME和PATH在哪些程序中有相同的功能?而且它是和操作系统绑定的,在操作系统级别设置的变量对于JAVA级别的程序来说还好,但是不适合用来存储数据库密码。我们如何在Node中使用环境变量?作者给出如下建议:通过命令行传递PORT=65534nodebin/www。这是最基本最常用的方式,但是当变量太多的时候,难免会觉得很破:documents.azure.com:19373/?ssl=true&replicaSet=globaldb"SECRET_KEY=b6264fca-8adf-457f-a94f-5a4b0d1ca2b9nodebin/www作者提到,此代码不可扩展。作者认为,对于工程师来说,可扩展性比正确使用更重要。使用.env文件很明显,如果命令行写不出来,就写到文件中:PORT=65534DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9VXh29T9U8xQNVGQ78lEQaL6yMNq3rOSA1WhUXHTOcmDf38Q8rg14NHtQLcUazure2.0CReplica_azure2.0/&replicaazure2.0l=ETQLcUazure2.0"b6264fca-8adf-457f-a94f-5a4b0d1ca2b9"通过dotenvnpm包,可以将.env文件的配置读入到Nodejs程序中。npminstalldotenv--save安装后直接调用解析,可以从环境变量中获取.env文件的配置信息:require("dotenv").config();varMongoClient=require("mongodb").MongoClient;//Reference.envvarsoffoftheprocess.envobjectMongoClient.connect(process.env.DB_CONN,function(err,db){if(!err){console.log("Weareconnected");}});这样有个问题,不要把配置文件发到Git仓库,可能会泄露隐私数据。不过VSCode帮你解决了这个问题(什么,你不用VSCode?)配置中的envFile属性:{"envFile":"${workspaceFolder}/.env"}程序仍然使用dotenv来读取环境变量。这样做会将配置保留在VSCode而不是代码中,这样你就不用再担心不小心上传配置文件了!使用NpmScripts作者推荐了一个好的做法:使用npmstart来运行项目而不是暴露Node命令。然后首先在VSCodelaunch.json中配置Npm模式:记住,需要在Node脚本中添加--inspect参数来触发VSCode调试器的hook:这样就可以通过npmstart启动Node,读取在VSCode环境变量中配置。生产环境中的环境变量上面介绍了在本地开发中如何使用环境变量,但是在生产环境中,环境变量必须以不同的方式进行管理。不知道作者和微软是什么关系。本篇推荐微软的Azure管理环境变量。主要思想是通过不赚取差价的中间人提供环境变量管理服务。通过AzureCLI启动你的Node项目,你可以从云服务平台获取环境变量信息。3精读环境变量管理是一个很重要的问题。之前看过将公司数据库密码提交到Github的例子,里面有很多反面教材。本文介绍了多种在本地开发中使用环境变量的方法。笔者会补充在生产环境中使用环境变量的经验。私有部署如果你在一家自动化运维水平较高的公司,这个问题已经被私有Git+私有云服务器自然解决了。是的,部署私有Git,将数据库密码提交到Git仓库就是完美的解决方案!持久化配置服务通过自建或开源的Azure持久化配置服务存储环境变量,并在服务端使用SDK获取。一般云服务商会封装这个服务,因为只有供应商提供服务器和持久化配置服务,供应商才能将持久化配置和服务器权限关联起来,这样第三方服务器即使自己也无法访问到该配置得到令牌。如果加密服务的安全级别特别高,不允许内部Git提交,同时要防止第三方(比如宽带运营商)截取信息,就必须使用加密服务。流程一般是:在加密平台上注册,拿到密钥。在加密平台设置环境变量,加密平台会对内容进行加密。使用NodeSDK获取加密平台输出的密文。使用SDK和密钥解密成明文。4小结对于在基础设施完善的公司工作的同学,可能不需要关心环境变量的安全性。对于自己搭建博客或者使用第三方服务器的同学,这篇文章告诉我们三点注意事项:不要将重要的环境变量提交到公共的Git仓库。通过VSCode在本地调试环境变量既方便又安全。生产环境通过云服务商提供的环境变量配置服务获取环境变量。5更多讨论讨论地址为:精读《如何在 nodejs 使用环境变量》·第89期·dt-fe/weekly想参与讨论的请点这里,每周都有新话题,周末或周一发布。