Variables de Entorno con dotenv en Node.js y Express

¿Qué son las Variables de Entorno?

Las variables de entorno son pares de clave-valor almacenados fuera del código de la aplicación, que permiten configurar aspectos de la aplicación de manera externa y segura.

  Características Principales

  • Almacenan información sensible
  • Configuran diferentes entornos (desarrollo, producción)
  • Mejoran la seguridad del código
  • Facilitan la configuración de la aplicación

Instalación de dotenv

bash
# Crear nuevo proyecto
mkdir dotenv-demo
cd dotenv-demo

Inicializar proyecto

bash
npm init -y

Instalar dotenv

bash
npm install dotenv

Configuración Básica


1Crear Archivo .env
bash
# Archivo .env
PORT=3000
DATABASE_URL=mongodb://localhost:27017/mibasedatos
API_KEY=mi_clave_secreta_de_api
JWT_SECRET=mi_secreto_super_seguro
DEBUG=true
2Configuración en Código
javascript
// Cargar variables de entorno al inicio de la aplicación
require('dotenv').config();

// Acceder a variables de entorno
const port = process.env.PORT || 4000;
const databaseUrl = process.env.DATABASE_URL;
const apiKey = process.env.API_KEY;

Ejemplos Prácticos


1Configuración Básica con Express
javascript
const express = require('express');
const dotenv = require('dotenv');

// Cargar variables de entorno
dotenv.config();

const app = express();
const PORT = process.env.PORT || 3000;
const DEBUG = process.env.DEBUG === 'true';

app.get('/', (req, res) => {
res.json({
  message: 'Aplicación funcionando',
  port: PORT,
  debugMode: DEBUG
});
});

app.listen(PORT, () => {
if (DEBUG) {
  console.log(`Servidor corriendo en puerto ${PORT} en modo DEBUG`);
}
});
2Configuración de Base de Datos
javascript
const mongoose = require('mongoose');

// Conexión a MongoDB usando variables de entorno
mongoose.connect(process.env.DATABASE_URL, {
useNewUrlParser: true,
useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'Error de conexión:'));
db.once('open', () => {
console.log('Conectado a la base de datos');
});
3Configuración de Servicios Externos
javascript
const axios = require('axios');

// Configuración de cliente API
const apiClient = axios.create({
baseURL: process.env.API_BASE_URL,
headers: {
  'Authorization': `Bearer ${process.env.API_KEY}`,
  'Content-Type': 'application/json'
}
});

// Ejemplo de solicitud
async function fetchData() {
try {
  const response = await apiClient.get('/datos');
  return response.data;
} catch (error) {
  console.error('Error al obtener datos:', error);
}
}

Múltiples Archivos de Configuración


1Archivos de Entorno Específicos
bash
# .env.development
PORT=3000
DEBUG=true
DATABASE_URL=mongodb://localhost:27017/desarrollo

# .env.production
PORT=80
DEBUG=false
DATABASE_URL=mongodb://produccion-server/mibasedatos
2Carga Condicional
javascript
// Seleccionar archivo de configuración
const environment = process.env.NODE_ENV || 'development';
require('dotenv').config({ 
path: `.env.${environment}` 
});
  Mejores Prácticas

  • Nunca commits archivos .env
  • Usa .env.example como plantilla
  • Protege archivos con información sensible

Ejemplo de .gitignore

bash
# Archivos a ignorar
node_modules/
.env
*.log

Ejemplo de .env.example

bash
# Plantilla de configuración
PORT=3000
DATABASE_URL=mongodb://localhost:27017/mibasedatos
API_KEY=tu_clave_api_aqui

Validación de Variables de Entorno

Código verifica si las variables de entorno necesarias (PORT, DATABASE_URL, API_KEY) están definidas en la aplicación. Si alguna de ellas falta, se muestra un mensaje de error en la consola y se detiene la ejecución del programa. Finalmente, la función validarConfiguracion se llama al inicio de la aplicación para asegurarse de que todas las configuraciones requeridas están presentes antes de continuar.

javascript
function validarConfiguracion() {
const requiredEnvs = ['PORT', 'DATABASE_URL', 'API_KEY'];

requiredEnvs.forEach(env => {
  if (!process.env[env]) {
    console.error(`Error: Falta la variable de entorno ${env}`);
    process.exit(1);
  }
});
}

// Llamar al inicio de la aplicación
validarConfiguracion();
  Conclusión

Las variables de entorno con dotenv son fundamentales para configurar aplicaciones Node.js de manera segura y flexible, permitiendo una gestión eficiente de configuraciones entre diferentes entornos.