Node.js 读取环境变量

200 阅读3分钟

一、什么是环境变量

环境变量(Environment Variables)是系统级的变量,它们通常包含操作系统的一些配置信息,或者用于存储应用程序的配置信息。环境变量通常用于以下目的:

  • 配置敏感信息:如数据库密码、API密钥等,避免将敏感信息写死在代码中。
  • 不同环境配置:开发环境、测试环境、生产环境等的不同配置。
  • 避免硬编码:使得应用的配置信息可以灵活调整,不需要修改代码。

在Node.js应用中,通常通过process.env来读取环境变量。

二、如何设置环境变量

1. 在开发环境中设置环境变量

在开发环境中,我们通常会通过命令行直接设置环境变量。例如:

在Windows系统中,设置环境变量的命令如下:

set DB_HOST=localhost
set DB_PORT=3306

这些变量只在当前终端会话中有效,退出会话后就失效。

2. 使用.env文件管理环境变量

为了避免每次启动应用时手动设置环境变量,很多开发者使用.env文件来统一管理环境变量。这是因为在生产环境中,我们通常不直接通过命令行设置环境变量,而是通过类似Docker、Kubernetes等工具来管理它们。

.env文件内容类似如下:

DB_HOST=localhost
DB_PORT=3306
SECRET_KEY=mysecretkey

在Node.js应用中使用.env文件,通常需要借助一个名为dotenv的第三方库。dotenv可以帮助我们从.env文件中加载环境变量。

安装dotenv库:

npm install dotenv --save

1. 通过应用入口文件(通常是app.jsindex.js)中加载并配置dotenv

import dotenv from 'dotenv';
dotenv.config();
console.log(process.env.DB_HOST);  // 输出:localhost
console.log(process.env.DB_PORT);  // 输出:3306
console.log(process.env.SECRET_KEY);  // 输出:mysecretkey

这样,dotenv会读取.env文件中的内容,并将其加载到process.env对象中,供你的应用使用。

2. 直接使用node命令也能加载.env文件

node --env-file=.env app.js

console.log(process.env.DB_HOST);  // 输出:localhost
console.log(process.env.DB_PORT);  // 输出:3306
console.log(process.env.SECRET_KEY);  // 输出:mysecretkey

您还可以传递多个--env-file参数。后续文件将覆盖先前文件中定义的预先存在的变量 node --env-file=.env --env-file=.development.env app.js

读取时的注意事项:

  1. 默认值:有些环境变量可能没有设置,或者在.env文件中没有定义。这时我们可以为这些变量设置默认值:

    const dbHost = process.env.DB_HOST || 'default_host';
    console.log(dbHost);  // 如果DB_HOST未定义,则输出 'default_host'
    
  2. 类型转换:环境变量通常是字符串类型,如果需要将其转换为其他类型(如数字或布尔值),需要显式地进行转换。例如:

    const port = parseInt(process.env.PORT) || 3000;
    console.log(port);  // 输出:如果PORT未定义,则默认输出3000
    

    对于布尔值类型的环境变量:

    const isDebug = process.env.DEBUG === 'true';
    console.log(isDebug);  // 如果DEBUG为'true',输出 true
    
  3. 环境变量的命名约定:通常,环境变量的命名约定是全大写,并使用下划线分隔各个单词。这种约定有助于提高代码的可读性和一致性。