什么是 Fastify
Fastify 是近年来流行起来的 Node.js 的 Web 框架,据官方说,在它的特定领域,它是最快的 Node.js 框架之一,它是非常轻量级的,并采用了异步编程风格。它常常与 TypeScript 和 Swagger 集成使用,可以提供 RESTful 风格的接口服务。
什么是环境变量
在 UNIX 系统中,所谓环境变量即为系统运行时在操作系统中设定的一个全局的键值对,可以在运行进程的执行环境中作为标识存取。在大型的 Web 服务中,对于不同的环境,如开发、测试、生产等需要不同的设置,这时候环境变量就成为了非常有价值的一种配置方式。
例如在 Fastify 中:
----- ------- - --------------------- ----- ---- - ----------------- -------------------------- ------------- - -- ----- ----- ---- ------------------- --------- -- ---- ---------- ---
上述代码中,fastify 应用通过读取 NODE_ENV、HOST 和 PORT 等环境变量来启动不同的 WEB Server,这是一种非常常见的开发模式。
环境变量的管理方法
在实际应用中,常常需要通过配置文件来维护环境变量,但是在代码中引用这些配置文件,每次都需要执行读取文件的操作,不仅代码复杂度高,而且容易引入安全风险。因此更好的方式是将环境变量集中设置在操作系统环境变量中,程序运行时直接读取操作系统环境变量中的值。我们可以使用 'dotenv' 库来方便地加载环境变量,它可以从 '.env' 文件将环境变量加载到 'process.env' 中。
安装 dotenv
我们需要先安装 dotenv 库,它可以方便地实现从 '.env' 文件中加载环境变量到操作系统环境变量的过程。只需在控制台执行以下命令:
--- ------- ------ ------
使用 dotenv
我们可以从 '.env' 文件加载环境变量到 'process.env' 中,就像下面这个例子一样:
-- -- ------ --------------------------- -- -- ---- -- ----- ---- - ----------------- -- ------- ---- -------- ---------------------- -- ---- ----------
这里需要说明的是,不要将 '.env' 文件上传到 Git 之类的代码托管平台,这是非常危险的。我们应该将 '.env' 文件加入 .gitignore 文件以排除上传。
.env 文件格式
'.env' 文件中必须一行一个环境变量,并按照 "键=值" 的格式赋值,例如:
--------- --------------
.env.example 文件
为了避免未定义环境变量导致程序在运行时崩溃,我们可以在项目根目录下创建一个 '.env.example' 文件。这个文件列出了需要的环境变量列表。在程序运行之前,开发者需要将 '.env.example' 复制并重命名为 '.env' 并将相应的值赋给每个变量。如果某个变量没有定义,程序将抛出异常,并让开发者知道需要设置的变量名称。
例如,我们创建一个 '.env.example' 文件:
- ------------ ---------
当开发者复制并且重命名该文件为 '.env',并且忘记设置 PORT 环境变量时,程序会有如下输出:
------ ------- ----------- --------- ----
特别注意
- 禁止在环境变量中明文存储敏感的数据,如密码、密钥等。如果有必要,可以考虑使用配置中心等方式。
- 过时的环境变量应该及时移除。
- 禁止在源代码存储敏感数据,包括密钥、密码等。
- 只有必要的人才能访问环境变量。
总结
在 Fastify 应用中,环境变量的管理是一项非常重要的任务,通过 dotenv 库,我们可以轻松加载环境变量,方便管理配置信息,同时增强了项目的安全性。建议使用环境变量来管理项目配置,把个人或组织的所有环境变量都明确记录下来,同时也不要在环境变量中存储敏感的数据。
-- -- ------ --------------------------- -- -- ---- -- ----- ---- - ----------------- -- ------- ---- -------- ---------------------- -- ---- ----------
参考链接
- fastify - A fast and low overhead web framework
- dotenv - A zero-dependency module that loads environment variables from a .env file
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64ee86d7f6b2d6eab3881ec6