如何在 Node.js 中使用 .env 文件管理环境变量 ?

news2025/3/21 20:31:03

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

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

我的开源项目

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

  • course-tencent-cloud(酷瓜云课堂 - gitee仓库)
  • course-tencent-cloud(酷瓜云课堂 - github仓库)

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

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

相关文章

Redis BitMap 用户签到

Redis Bitmap Bitmap(位图)是 Redis 提供的一种用于处理二进制位(bit)的特殊数据结构,它基于 String 类型,每个 bit 代表一个布尔值(0 或 1),可以用于存储大规模的二值状…

未来办公与生活的新范式——智慧园区

在信息化与智能化技术飞速发展的今天,智慧园区作为一种新兴的城市发展形态,正逐步成为推动产业升级、提升城市管理效率、改善居民生活质量的重要力量。智慧园区不仅融合了先进的信息技术,还深刻体现了可持续发展的理念,为园区内的…

Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!)

Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!) 在实战中,⼤多数情况下都不需要从0开始训练模型,⽽是使⽤“⼤⼚”或者其他研究者开源的已经训练好的⼤模型。 在各种⼤模型开源库中,最…

【CSS3】化神篇

目录 平面转换平移旋转改变旋转原点多重转换缩放倾斜 渐变线性渐变径向渐变 空间转换平移视距旋转立体呈现缩放 动画使现步骤animation 复合属性animation 属性拆分逐帧动画多组动画 平面转换 作用:为元素添加动态效果,一般与过渡配合使用 概念&#x…

Unity音频混合器如何暴露参数

音频混合器是Unity推荐管理音效混音的工具,那么如何使用代码对它进行管理呢? 首先我在AudioMixer的Master组中创建了BGM和SFX的分组,你也可以直接用Master没有问题。 这里我以BGM为例,如果要在代码中进行使用就需要将参数暴露出去…

如何理解分布式光纤传感器?

关键词:OFDR、分布式光纤传感、光纤传感器 分布式光纤传感器是近年来备受关注的前沿技术,其核心在于将光纤本身作为传感介质和信号传输介质,通过解析光信号在光纤中的散射效应,实现对温度、应变、振动等物理量的连续、无盲区、高…

PMP-项目运行环境

你好!我是 Lydia-穎穎 ♥感谢你的陪伴与支持 ~~~ 欢迎一起探索未知的知识和未来,现在lets go go go!!! 1. 影响项目的要素 项目存在在不同的环境下,环境对于项目的交付产生不同的影响。需了解环境对于项目的影响,采取相应措施应对…

shell 脚本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外网通讯良好!" elseecho "网络连接失败&#x…

Huawei 鲲鹏(ARM/Aarch64)服务器安装KVM虚拟机(非桌面视图)

提出问题 因需要进行ARM架构适配,需要在Huawei Taishan 200k(CPU: Kunpeng 920 5231K)上,创建几台虚拟机做为开发测试环境。 无奈好久没搞了,看了一下自己多年前写的文章:Huawei 鲲鹏&#xf…

《Python实战进阶》No28: 使用 Paramiko 实现远程服务器管理

No28: 使用 Paramiko 实现远程服务器管理 摘要 在现代开发与运维中,远程服务器管理是必不可少的一环。通过 SSH 协议,我们可以安全地连接到远程服务器并执行各种操作。Python 的 Paramiko 模块是一个强大的工具,能够帮助我们实现自动化任务&…

【Kafka】深入了解Kafka

集群的成员关系 Kafka使用Zookeeper维护集群的成员信息。 每一个broker都有一个唯一的标识,这个标识可以在配置文件中指定,也可以自动生成。当broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系…

C++特性——RAII、智能指针

RAII 就像new一个需要delete,fopen之后需要fclose,但这样会有隐形问题(忘记释放)。RAII即用对象把这个过程给包起来,对象构造的时候,new或者fopen,析构的时候delete. 为什么需要智能指针 对于…

CentOS系类普通挂载磁盘挂载命令

检查磁盘是否有分区 lsblk如果 vdb 下面没有分区(比如 vdb1),你需要先创建分区。 创建分区(如果需要) fdisk /dev/vdb然后在 fdisk 交互界面: 输入 n 创建新分区 选择 p 创建主分区 默认分区号和大小 输…

强化学习(赵世钰版)-学习笔记(9.策略梯度法)

本章是课程的导数第二章,旨在讲解策略的函数化形式。 之前的方法,描述一个策略都是用表格的形式,每一行代表一个状态,每一列代表一个行为,表格中的元素对应相关状态下执行相关行为的概率。 函数化的策略表征形式是指&a…

【c++】【STL】unordered_set 底层实现(简略版)

【c】【STL】unordered_set 底层实现&#xff08;简略版&#xff09; ps:这个是我自己看的不保证正确&#xff0c;觉得太长的后面会总结整个调用逻辑 unordered_set 内部实现 template <class _Kty, class _Hasher hash<_Kty>, class _Keyeq equal_to<_Kty>…

网络安全设备配置与管理-实验4-防火墙AAA服务配置

实验4-p118防火墙AAA服务配置 从这个实验开始&#xff0c;每一个实验都是长篇大论&#x1f613; 不过有好兄弟会替我出手 注意&#xff1a;1. gns3.exe必须以管理员身份打开&#xff0c;否则ping不通虚拟机。 win10虚拟机无法做本次实验&#xff0c;必须用学校给的虚拟机。首…

【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation

论文地址&#xff1a;Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来&#xff0c;多行为推荐模型取得了显著成功。然而&#xff0c;许多模型未充分考虑不同行为之间的共性与差异性&#xff0c;以…

基于协同过滤推荐算法的景点票务数据系统(python-计算机毕设)

摘 要 I ABSTRACT II 第 1 章 引言 1 研究背景及意义 1 研究背景 1研究意义 1 国内外研究现状 2 智慧旅游 3旅游大数据 3 研究内容 4本章小结 4 第 2 章 相关技术概述 5 基于内容的推荐算法 5 基于内容的推荐算法原理 5基于内容的推荐算法实现 5 协同过滤推荐算法 6 协同过…

Ubuntu 24 常用命令方法

文章目录 环境说明1、账号管理1.1、启用 root 2、包管理工具 apt & dpkg2.1、apt 简介 & 阿里源配置2.2、dpkg 简介2.3、apt 和 dpkg 两者之间的关系2.4、常用命令 3、启用 ssh 服务4、防火墙5、开启远程登录6、关闭交换分区7、build-essential&#xff08;编译和开发软…

Flask多参数模版使用

需要建立目录templates&#xff1b; 把建好的html文件放到templates目录里面&#xff1b; 约定好参数名字&#xff0c;单个名字可以直接使用&#xff1b;多参数使用字典传递&#xff1b; 样例&#xff1a; from flask import render_template # 模板 (Templates) #Flask 使用…