在Node.js中使用API​​密钥时的最佳实践

时间:2016-02-12 07:05:48

标签: node.js api-key

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

Sooo基本上只是:

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

我不喜欢拥有这个全局变量,在文件之间传递是一件痛苦的事。有没有更好的方法来获取我的钥匙在何时/何时需要它?这样做有什么标准吗?

1 个答案:

答案 0 :(得分:44)

您正在执行的操作的常规替代方法,尤其是在与API密钥相关时,使用environment variables。这是一个操作系统级配置工具。每个进程都有自己的一组环境变量,通常从其父进程继承。按照惯例,环境变量具有大写名称。

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

$ MY_VARIABLE=test node app.js

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

process.env.MY_VARIABLE
但是,在每次调用程序时都必须继续传递环境变量,这可能很乏味。这就是为什么有dotenv这样的软件包允许您将环境变量存储在文本文件中的原因。

更具体地说,您将拥有一个名为.env的文件,其中可能包含:

MY_VARIABLE=test
OTHER_VARIABLE=foo

app.js的开头,您可以执行以下操作:

require('dotenv').config();

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

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

现在,您不必在调用时将环境变量显式传递给您的应用程序,即您可以像往常一样运行它:

$ node app.js

如果您执行明确传递一个,它将覆盖您在.env文件中提供的任何值:

$ MY_VARIABLE=bar node app.js

现在,MY_VARIABLE环境变量的值为"bar",而不是"testing"。由于OTHER_VARIABLE未明确传递,因此会保留"foo"文件中指定的.env值。