Node.js 中使用 .env 文件管理环境变量

Node.js 中使用 .env 文件管理环境变量

Node.js 中使用 .env 文件管理环境变量

1 人赞同了该文章

 

Using .env File in Node.js

 

Node.js 应用程序通常依赖于环境变量来管理敏感信息或配置设置。.env 文件已经成为一种流行的本地管理这些变量的方法,而无需在代码存储库中公开它们。本文将探讨 .env 文件为什么重要,以及如何在 Node.js 应用程序中有效的使用它。

为什么使用 .env 文件 ?

Security

在源代码中保留敏感信息 (如 API 密钥、数据库凭据) 可能会将它们暴露给意想不到的访问者。将此数据分离到特定于环境的文件中,您可以使用 .gitignore 轻松地将其排除在版本控制之外。

Configurability

随着应用程序的迭代增长,它们可能需要针对不同环境 (开发、测试、生产) 使用不同配置。使用 .env 文件有助于在配置和代码之间保持清晰的分离。

Portability

通过在代码中引用环境变量,您可以维护一个易于在不同环境之间移动的一致的代码库,只需要更新 .env 文件或给定部署的实际环境变量。

如何在 Node.js 中使用 .env 文件

1. Creating the .env file

在项目的根目录中创建一个 .env 文件,环境变量定义:key = value

DATABASE_URL=mongodb://localhost:27017/mydb
SECRET_KEY=my-secret-key
API_KEY=abcdef123456

2. Ignoring the .env file

为了防止你的 .env 文件提交到存储库,将其添加到 .gitignore 文件中。

# .gitignore
node_modules/
.env

3. Reading the .env file in your application

Node.js 应用程序访问 .env 文件中定义的变量,通常会使用 dotenv 软件包。

npm install dotenv

在主应用程序文件的顶部(通常是 index.js 或 server.js),导入并配置 dotenv

require('dotenv').config();console.log(process.env.DATABASE_URL); // Outputs: mongodb://localhost:27017/mydb

通过调用 dotenv.config(), .env 文件中的所有变量加载到 process.env,它们在整个应用程序中都可以访问。

4. Using environment variables in the application

既然已经加载了环境变量,就可以在整个应用程序中使用它们了。例如,当连接到 MongoDB 实例时

const mongoose = require('mongoose');mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true });

或者在配置 API 时

const apiKey = process.env.API_KEY;

最佳实践

Never commit your .env file:

一定要确保 .env 文件被添加到你的 .gitignore 文件中。

Use descriptive variable names

清晰的名称使团队成员更容易理解每个变量的用途。

Provide a .env.example

与其共享 .env 文件,不如创建一个 .env.example 文件,包含所有键但不包含值,这可以作为团队成员或部署的模板。

Use fallbacks

有时,您可能希望在缺少环境变量的情况下提供一个默认值。

const apiKey = process.env.API_KEY || 'default-api-key';

Don’t over-rely on .env

对于较大的应用程序或微服务架构,请考虑使用专用的配置管理系统或服务。

我的开源项目

 

酷瓜云课堂-在线教育解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/907272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 7中安装jenkins

1.安装java11 [root@localhost ~]# yum install -y java-11-openjdk-devel [root@localhost ~]# java --version openjdk 11.0.23 2024-04-16 LTS OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build …

pythonjs逆向 破解滑动验证码 - hello-*

现在的滑动验证码防盗等级都比较高,之前的是一张完整的图片带缺口,现在返回的图片是打乱顺序拼接而成的,所以现在破解不仅要识别滑块的缺口,同时还需要复原完整的图片一.伪造请求获取验证码图片可以看到请求中主要…

解决 pandas.to_csv 乱码、丢失行和自动换行问题 时间转换

解决 pandas.to_csv 乱码、丢失行和自动换行问题-百度开发者中心 https://developer.baidu.com/article/details/2792989 在使用 pandas.to_csv 函数时,可能会遇到一些问题,如乱码、丢失行和自动换行等。这些问题通常…

JavaDay7

数组 数组的定义数组是相同类型数据的有序集合。 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组声明创建首…

腾讯混元 3D 3.0 模型发布

腾讯混元 3D 3.0 模型发布腾讯混元 3D 3.0 模型发布来源: OSCHINA 编辑: 局 2025-09-16 18:06:000推广 | 鸿蒙应用开发者激励计划 2025 正式发布,总奖金池超亿元!限时开放,快来了解腾讯宣布推出混元 3D 3.0 模型,其…

Bun:不仅是新的JavaScript运行时,并且重塑了JavaScript工具链

Bun:不仅是新的JavaScript运行时,并且重塑了JavaScript工具链Bun:不仅是新的JavaScript运行时,并且重塑了JavaScript工具链 原创修改于 2023-11-09 18:56:015.4K00代码可运行举报文章被收录于专栏:世界尽头与冷酷…

AI Agent 与 MCP 核心解析与企业级应用指南

AI Agent 与 MCP 核心解析与企业级应用指南AI Agent 与 MCP 核心解析与企业级应用指南 一、引言 AI Agent(人工智能代理)与 MCP(Model Context Protocol,模型上下文协议)是当前人工智能技术前沿的核心概念。AI Ag…

前端场景题笔记

先说背景再说方案 1. js超过number最大值的数怎么处理? 换数据类型。 2. 如何解决页面请求接口大规模并发问题? 请求队列,Push,shift。防抖节流。 3. 大文件上传? 前端切片,标记唯一值,后端整合。 …

P3934 [Ynoi Easy Round 2016] 炸脖龙 I 做题记录

欧拉函数前置芝士:扩展欧拉定理 题目大意 给一个长为 \(n\) 的序列,\(m\) 次操作,每次操作:区间 \([l,r]\) 加 \(x\); 对于区间 \([l,r]\),查询:\[{a_l}^{{a_{l+1}}^{{a_{l+2}}^{{\dots} ^{a{r}}}}} \mod p \]思…

核桃 CSP-S 模拟

核桃 CSP-S 模拟 T3 题意: 给定一个 \(01\) 串,选定一个操作序列,每次从原串中删除一个数,保持原串中相对顺序不变,把形成的新字符串加入答案字符串,求出本质不同答案字符串总数。 其中 \(n\le 400\) 思路: 我们…

正确输入连字号、连接号、破折号和负号

转载:Pigman - 博客园: 正确输入连字号、连接号、破折号和负号论文书写和报告编制中,经常出现连字号、连接号、破折号和负号的混淆使用,既不符合规范也影响文档美观。下面对这组符号进行区分,并给出word下正确输入…

9 月记录

P13644 K-LCA 给出树和 \(k\),每次询问给出区间 \([l,r]\),找到选择 \(k\) 个区间内的点使得 LCA 深度最大。 \(n,q\le 10^5,1<k\le n\)。考虑回滚莫队,每次加入一个点,二分最深的子树个数 \(\ge k\) 的祖先,可…

python基础-元组

元组: 一个元组可以存储多个数据,切元组内的数据是不可更改 t1 = (10,20,30)t2 = (10,)t3 = 10, 元组操作:元组不支持修改,只支持查找tuple.index()访问:下标访问: tuple[index]统计某项元素出现的次数: tuple.c…

.net core中获得程序集以及注入框架的方法总结

虚方法public class Animal { // 虚方法 public virtual void MakeSound() { Console.WriteLine("动物发出声音"); } }public class Dog : Animal { // 重写虚方法 public override void MakeSound() { Cons…

python基础篇-list(列表)

list:列表中可以一次性存储多个数据,且数据项的类型可以不同 常见操作:1.查找下标访问,查找某个位置的数据项: list[index]查找某个数据项首次出现的下标: list.index[item, 开始位置下标, 结束位置下标];如果存…

银河麒麟桌面版v10sp1安装redis

银河麒麟桌面版v10sp1安装redisRedis安装(源码编译方式) 1. ‌安装编译依赖‌ sudo apt update sudo apt install -y sudo apt build-essential sudo apt tcl sudo apt ibjemalloc-dev 2. ‌下载Redis源码‌ wget ht…

vscode使用powershell中文乱码

VSCode使用终端中文乱码 原因: vscode编辑文本默认使用utf-8,但是windows的终端默认使用gbk(简体中文)编码。utf-8采用1-4位记录一个字符,其中中文采用3位。gbk采用两位记录一个中文字符。所以中文显示乱码。 解决…

关于如何读懂 P11832 [省选联考 2025] 图排列?

题面太形式化了! 我!根!本!读!不!懂! 这题想要拿分必须转化题面。 初步转化 他只给了我们 \((p_{a_i},p_{b_i})\),然后让我们去找最小的 \(p\)? 没给我 \(a_i,b_i\)?\(a_i,b_i\) 不用刻意构造出来,我们只需…

Untitled

Untitled展开思考过程 Hinted 3/5 似乎没有性质,因此考虑做一步转化。 考虑一个点若被同种边通过大于 2 次,那么 必然有一次没有用,考虑每条边可以是区间 +1 或者是区间 -k(k 足够大),要求最终每个点 <0 并且…

敏感性分析

什么是敏感性分析? 数学模型只是实际问题的一个粗略的抽象,最优解也只是针对某一特定的数学模型。管理者要对未来做各种假设,在这些假设下,测试可能产生的结果,通过对各种结果深入分析来指导决策。通常,在取得最…