解决 Fastify 中的环境变量问题

阅读时长 4 分钟读完

在前端开发中,环境变量是一个非常重要的概念。Fastify 是一个流行的 Web 框架,它允许我们使用环境变量来配置应用程序的行为。在这篇文章中,我们将探讨在 Fastify 中使用环境变量时可能遇到的问题,并提供解决方案。

问题描述

假设我们正在开发一个应用程序,它需要从环境变量中读取一些配置。我们可以使用 process.env 对象来获取这些环境变量。例如,我们可以通过以下方式来获取 NODE_ENV 变量:

然而,在 Fastify 中,如果您在应用程序的顶层范围内执行此代码,则可能会遇到问题。假设我们有一个非常简单的 Fastify 应用程序:

-- -------------------- ---- -------
----- ------- - --------------------

---------------- -------- ----- ---- -
  ----- --- - ---------------------
  ---------- --- ---
--

-------------------- -------- ----- -------- -
  -- ----- -
    ------------------
    ---------------
  -
  ------------------- --------- -- ------------
--

如果我们在命令行中设置 NODE_ENV=production 并启动应用程序,则应该在 / 路由上看到 env 的值为 production。但实际上,我们得到的是 undefined

问题原因

这是因为当 Fastify 启动时,它会派生一个工作进程以处理请求。此工作进程是 cluster.fork() 调用的结果,并且是从主进程(即 node 进程)中派生出来的。

这意味着 Fastify 工作进程的环境变量与主进程的环境变量不同。因此,process.env 对象在工作进程中不包含我们在主进程中设置的环境变量。此时我们应该怎么做?

解决方案

在 Fastify 中使用环境变量,有一些不同的解决方案。这里我们将重点介绍两种方法。

在启动脚本中设置环境变量

第一种方法是在启动脚本中设置环境变量。例如,在命令行中执行以下命令:

这将在启动应用程序时设置 NODE_ENV 环境变量。这种方法的好处是它非常简单,不涉及任何更改应用程序本身的代码。但是,该方法有一个缺点,那就是不同的操作系统可能有不同的设置环境变量的方式,可能导致一些兼容性问题。

使用 dotenv 库

dotenv 是一个 Node.js 库,可以从 .env 文件中加载环境变量。如果您将 dotenv 添加到依赖项并进行配置,则可以在 Fastify 中使用它来加载环境变量。

安装 dotenv:

创建 .env 文件,添加所需的环境变量:

在应用程序顶层范围内,使用 dotenv.env 文件中加载环境变量:

-- -------------------- ---- -------
--------------------------

----- ------- - --------------------

---------------- -------- ----- ---- -
  ----- --- - ---------------------
  ---------- --- ---
--

-------------------- -------- ----- -------- -
  -- ----- -
    ------------------
    ---------------
  -
  ------------------- --------- -- ------------
--

这种方法的好处是它非常灵活,可以根据需要定义多个不同的环境变量。同时,它也很容易移植,因为只要您将 .env 文件包含在项目中,就可以在任何操作系统上正常工作。

总结

在 Fastify 中使用环境变量可能会导致某些问题,但是有不同的解决方案可以解决它们。不管您选择哪种方法,都应该注意避免将敏感信息存储在环境变量中。我们应该学会使用和保护环境变量,以确保我们的应用程序在不同的环境中都能够正常运行。

示例代码

GitHub 地址:https://github.com/openaihub/articles/blob/master/fastify-environment-variables/app.js

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64620cbf968c7c53b03611d7

纠错
反馈