在Node.js中使用API​​密钥时的最佳做法

我在我的Node.js应用程序中使用了一个API密钥。 目前,我将它保存在一个文本文件中,并在我的应用程序启动时将其放入一个全局variables中。

Sooo基本上只是:

var key = getKey(); useKeyGetData(key); 

我不喜欢有这个全局variables,并且在文件之间传递是一种痛苦。 有什么更好的方法让我的钥匙在哪里/何时需要? 有这样的标准吗?

传统的替代方法,特别是在涉及API密钥的时候,就是使用环境variables 。 这是一个操作系统级别的configuration工具。 每个进程都有自己的一组环境variables,通常从其父进程inheritance。 按照惯例,环境variables有大写的名字。

在node.js中,您可以通过process.env访问环境variables。 例如,如果你运行这样的应用程序:

 $ MY_VARIABLE=test node app.js 

您可以通过以下方式访问MY_VARIABLE环境variables的值:

 process.env.MY_VARIABLE 

然而,在每次调用程序时都必须保持传递环境variables的冗长。 这就是为什么有一些软件包,如dotenv ,它允许你将你的环境variables存储在一个文本文件中。

更具体地说,你将会有一个名为.env的文件,并且你可能拥有:

 MY_VARIABLE=test OTHER_VARIABLE=foo 

在你的app.js的开始,你做:

 require('dotenv').config(); 

这将从.env文件读取环境variables值。 您可以像访问任何其他环境variables一样访问它们:

 console.log("MY_VARIABLE: " + process.env.MY_VARIABLE); console.log("OTHER_VARIABLE: " + process.env.OTHER_VARIABLE); 

现在,您不必在调用时将环境variables显式传递给应用程序,也就是说,您可以照常运行它:

 $ node app.js 

如果你明确地传递一个,它会覆盖你在.env文件中给出的任何值:

 $ MY_VARIABLE=bar node app.js 

现在, MY_VARIABLE环境variables的值将是"bar"而不是"testing" 。 由于OTHER_VARIABLE没有被明确地传递,它保留了在.env文件中指定的"foo"值。