在 Node.js 中使用 API 键的最佳实践

Best practice when using an API key in Node.js

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

所以基本上就是:

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

我不喜欢这个全局变量,在文件之间传递很麻烦。有没有更好的方法来获取我的密钥 where/when 我需要它?这样做有一些标准吗?

您正在做的事情的传统替代方法是使用 environment variables,尤其是在涉及 API 键时。这是一个操作系统级别的配置工具。每个进程都有自己的一组环境变量,通常从其父进程继承。按照惯例,环境变量的名称都是大写的。

在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 未显式传递,因此它保留在 .env 文件中指定的 "foo" 值。