在 Node.js 中使用环境变量
使用 dotenv
安全处理密钥与API令牌
相关文章:保护你的令牌
快速回顾一下secret和non-secret的区别:
- 🔒
Secret keys必须使用自定义服务器(例如Node/Express/Heroku)来隐藏(代理)对第三方API服务的请求。 - 🌍
Non-secret keys描述了可以发送到浏览器的密钥。
本文将重点讨论如何使用环境变量处理 🔒
Secret keys。
概述
要在NodeJS代码中安全访问密钥:
- 用环境变量替换硬编码的密钥。例如:
process.env.API_SECRET - 使用像
dotenv这样的库,并配合.env文件。将之前硬编码的密钥添加到.env文件中。 - 确认
.env文件已添加到你的.gitignore文件中!
不要在部署服务器上创建
.env文件。使用你的托管服务(例如Heroku、Netlify、AWS EC2)提供的环境变量管理工具:例如仪表板或命令行。
代码示例
我们将定义几个文件:
.env./db/connection.js./api/users.js
首先,安装 dotenv 包。
npm install dotenv接下来,在项目根目录创建 .env 文件。
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ 绝对不要 提交 .env 文件。
❌ 避免在服务器上创建 .env 文件。
查阅你的托管服务商文档以设置 环境变量。
要确保 .gitignore 中包含 .env 行,可以运行:
# 自动更新 .gitignore# 在终端运行:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# 注意:不会输出任何内容./db/connection.js 提供了一个共享的 pg.Pool 实例,用于查询数据库。
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。
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- 永远不要将
.env密钥提交到 git! - 团队中不要共享
.env文件。*
* 每台新的开发电脑或桌面都应 生成新的访问密钥和令牌。
如果无法实现,共享 .env 时需格外小心(尤其当服务可能失效所有旧密钥,或你使用的是付费 API 的有限访问令牌时。)
⚠️ 重要提示:必要时始终使用安全消息服务(优先选择支持消息过期功能的服务。)
祝顺利,有问题欢迎随时提问!🎉