在 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"
值。
我在 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"
值。