在Node.js中读取环境变量

在Node.js中读取环境变量

技术背景

在Node.js应用开发中,环境变量是一种重要的配置方式,它可以用来存储敏感信息(如API密钥、数据库密码)、设置应用的运行模式(开发、生产等),还能针对不同的运行环境动态配置应用的参数。Node.js为我们提供了方便的机制来读取环境变量。

实现步骤

直接使用process.env读取

在Node.js里,process.env对象包含了所有的环境变量。可以通过键来访问特定的环境变量,形式如 process.env.ENV_VARIABLE,这里的ENV_VARIABLE就是你要访问的变量名。

示例代码

1
2
var mode   = process.env.NODE_ENV;
var apiKey = process.env.apiKey;

使用dotenv包管理环境变量

为了按项目管理环境变量,可以使用dotenv包:

  1. 在项目目录下创建一个.env文件,把所有的变量写成VAR_NAME=value的形式。比如:
1
2
DATABASE_CONFIG={"host":"localhost","user":"root","password":"password123"}
BASE_URL=192.168.163.128;
  1. 在应用的入口文件顶部添加 require('dotenv').config();,之后就可以用 process.env.VAR_NAME 来访问环境变量了。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require('dotenv').config();

const url = process.env.BASE_URL;
console.log(`Base Url which is reading from env : ${url}`)

const databaseConfigString = process.env.DATABASE_CONFIG;
console.log(databaseConfigString);

let databaseConfig;

try {
databaseConfig = JSON.parse(databaseConfigString);
} catch (error) {
console.error('Error parsing DATABASE_CONFIG:', error.message);
}

if (databaseConfig) {
console.log('Database Config:', databaseConfig);
console.log('Host:', databaseConfig.host);
console.log('User:', databaseConfig.user);
console.log('Password:', databaseConfig.password);
}

核心代码

获取所有环境变量

1
console.log(process.env);

使用动态生成的键获取环境变量

1
2
var v = 'HOME';
process.env[v];

最佳实践

避免布尔逻辑陷阱

要注意,即便在.env文件里定义变量为SHOULD_SEND=false 或者 SHOULD_SEND=0,这些值都会被转换为字符串(分别是 "false""0"),不会被当作布尔值解释。所以,建议进行明确的检查,例如:

1
2
3
db.connect({
debug: process.env.NODE_ENV === 'development'
});

确保环境变量在导入模块前已设置

可以使用预初始化脚本或者动态导入:

1
2
3
4
5
import myEnvCheck from ...;
myEnvCheck(["env1","env2"])

// 现在使用动态导入,到达时才运行,不会被提升
import("index.js").catch(...);

常见问题

布尔值被当作字符串处理

正如前文所述,直接使用布尔类型的环境变量容易引发问题,要进行明确的检查或者转换。

环境变量未正确加载

可能是因为没有正确配置dotenv,要保证.env文件存在且require('dotenv').config(); 被添加到了入口文件顶部。


在Node.js中读取环境变量
https://119291.xyz/posts/read-environment-variables-in-nodejs/
作者
ww
发布于
2025年5月30日
许可协议