DanLevy.net

在 Node.js 中使用环境变量

使用 dotenv

Hero image for 在 Node.js 中使用环境变量

安全处理密钥与API令牌

相关文章:保护你的令牌

快速回顾一下secretnon-secret的区别:



本文将重点讨论如何使用环境变量处理 🔒 Secret keys

下方包含代码示例。

概述

在NodeJS代码中安全访问密钥

  1. 用环境变量替换硬编码的密钥。例如:process.env.API_SECRET
  2. 使用像 dotenv 这样的库,并配合.env文件。将之前硬编码的密钥添加到.env文件中。
  3. 确认.env文件已添加到你的.gitignore文件中!

不要在部署服务器上创建.env文件。使用你的托管服务(例如Heroku、Netlify、AWS EC2)提供的环境变量管理工具:例如仪表板或命令行

代码示例

我们将定义几个文件:

  1. .env
  2. ./db/connection.js
  3. ./api/users.js

首先,安装 dotenv 包。

Terminal window
npm install dotenv

接下来,在项目根目录创建 .env 文件。

.env
PGDATABASE="postgres"
PGHOST="localhost"
PGPORT=5234
PGUSER="postgres"
PGPASSWORD="password"

绝对不要 提交 .env 文件。

❌ 避免在服务器上创建 .env 文件。

查阅你的托管服务商文档以设置 环境变量

要确保 .gitignore 中包含 .env 行,可以运行:

Terminal window
# 自动更新 .gitignore
# 在终端运行:
[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore
# 注意:不会输出任何内容

./db/connection.js 提供了一个共享的 pg.Pool 实例,用于查询数据库。

./db/connection.js
require('dotenv').config(); // ✅ 加载 .env 文件
const pg = require('pg');
const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development')
console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);
// ^^ 仅用于显示调试连接变量
// pg 会自动使用 PG* 环境变量
module.exports = new pg.Pool();

./api 文件夹包含与数据库表/视图的接口。

以下是 users 表的示例 ./api/users.js

./api/users.js
const db = require('../db/connection.js');
module.exports = {
findUsername: function(username) {
return db.query('SELECT * FROM users WHERE username=$1', username);
}
};

* 每台新的开发电脑或桌面都应 生成新的访问密钥和令牌。 如果无法实现,共享 .env 时需格外小心(尤其当服务可能失效所有旧密钥,或你使用的是付费 API 的有限访问令牌时。)

⚠️ 重要提示:必要时始终使用安全消息服务(优先选择支持消息过期功能的服务。)

祝顺利,有问题欢迎随时提问!🎉