我开始学习NodeJS
几天了,我面临一个有关数据库凭据和gmail连接(nodemailer
的最后一个需求)的问题。
基本上,我所做的是创建一个像这样的文件:
const config = {
development: {
url: '127.0.0.1',
database: {
host: 'mongodb://localhost',
port: '27017',
db: 'foo'
},
gmail: {
username: 'foo@gmail.com',
password: 'foo',
},
server: {
host: '127.0.0.1',
port: '3000'
}
},
production:{
url: 'https://my.site.com',
database: {
host: '127.0.0.1',
port: '27017',
db: 'foo'
},
gmail: {
username: 'foo@gmail.com',
password: 'foo',
},
server: {
host: '127.0.0.1',
port: '3000'
}
}
};
module.exports = config;
我不喜欢将此信息输入到应用程序中,因此经过研究,我发现了该库:dotenv。这个lib将信息存储在进程env
变量中,但是实质是相同的。为什么我应该选择像dotenv
这样的解决方案来代替我的config
模块?
您有什么建议?
答案 0 :(得分:1)
您使用了dotenv软件包,因为它会创建文件并将其保存到您的进程中,因为config.js不会保存在进程中 但是为什么我必须在处理中保存? 第一件事凭据永远不会在git或任何其他版本控制系统上推送。如果我们不将其推入git,如果稍后再克隆它,程序将崩溃。但是在这种情况下,如果我使用Process.env程序将不会崩溃。第二,如果我们有大团队,我们还可以对流程文件添加额外的安全性,但对JS文件添加额外的安全性,因为开发团队应该可以访问这些文件以进行编辑和其他操作
这是有用的链接,以获取更多信息 https://medium.com/@sherryhsu/managing-configurations-in-node-js-apps-with-dotenv-and-convict-d74070d37373
答案 1 :(得分:0)
我绝对推荐dotenv,这是它创建的目的。但是,我建议特别使用的是dotenv-safe npm软件包。与dotenv相比,它提供了升级的功能。由于您不会将.env.xy
文件推送到其中包含所有敏感数据的git之类的版本管理中,因此您会很快对应该将哪些变量放入环境文件中感到困惑,尤其是在工作时在团队中。假设亚当创建了一个新的env变量,并在其代码中使用了该变量并推送了他的代码。由于env文件位于.gitignore中,因此您只有在代码尝试使用该变量并中断时才发现Adam引入了一个新的env变量。但是,使用dotenv-safe时,您可以使用有效的密钥推送.env.example
文件,但是将伪值(例如MY_API_KEY=somerandomgibberish
)推送到git,而您的{{1 }}文件。如果您的真实.env文件(在这种情况下,MY_API_KEY=aaf347xkhskallmtopsecret
与从git中提取的.env.production
相比)有任何不匹配的密钥,那么Dotenv-safe不允许运行您的应用程序。这样,您会发现Adam在启动您的APP时添加了他的新env变量。这样,一旦您的应用具有在.env.production
中预定义的所有变量,就不会出现意外行为,从长远来看,可以保护您免受很多麻烦和数千次不必要的重新部署。 :)