Node.js y APIs con Express

Estructura de proyecto, env vars y configuracion

Estructura de proyecto, variables de entorno y configuración Una API que funciona en tu máquina pero falla en producción casi siempre tiene un problema de configuración. La regla de oro del enfoque Twelve-Factor es separar la configuración del código: lo que cambia entre tu portátil, el servidor de pruebas y producción (puertos, URLs de base de datos, claves) vive en el entorno, nunca dentro de los archivos versionados en Git. Una estructura sencilla y escalable mi-api/ src/ config.js # lee y va
Tiempo de estudio
16 Min

Estructura de proyecto, variables de entorno y configuración


Una API que funciona en tu máquina pero falla en producción casi siempre tiene un problema de configuración. La regla de oro del enfoque Twelve-Factor es separar la configuración del código: lo que cambia entre tu portátil, el servidor de pruebas y producción (puertos, URLs de base de datos, claves) vive en el entorno, nunca dentro de los archivos versionados en Git.



Una estructura sencilla y escalable


mi-api/
src/
config.js # lee y valida process.env
app.js # crea la app Express (sin escuchar)
server.js # arranca y escucha en el puerto
routes/
middleware/
db/
.env # NUNCA se sube a Git
.env.example # plantilla que sí se versiona
.gitignore

Separar app.js (la configuración de Express) de server.js (el listen) te permite importar la app en tus tests sin abrir un puerto real.



Centraliza y valida la configuración


// src/config.js
import 'dotenv/config';

function required(name) {
const value = process.env[name];
if (!value) throw new Error(`Falta la variable de entorno ${name}`);
return value;
}

export const config = {
port: Number(process.env.PORT ?? 3000),
databaseUrl: required('DATABASE_URL'),
nodeEnv: process.env.NODE_ENV ?? 'development',
};


Atención

Añade .env a tu .gitignore el primer día. Subir credenciales a un repositorio, aunque sea privado, es la fuga de secretos más común y la más cara de revertir.



Falla rápido, no a medias


Si falta DATABASE_URL, es mejor que la app no arranque a que lance un error críptico en la primera consulta de un usuario real. Validar al inicio convierte un fallo silencioso en un error claro y temprano.



¿Qué archivo debe versionarse en Git para documentar las variables sin filtrar secretos?

.env.example documenta qué variables existen sin exponer valores reales. El .env de verdad queda fuera de Git, y nunca se hardcodean secretos en el código.


Ejercicio práctico


Objetivo: montar una configuración robusta que falle rápido.



  1. Crea config.js con la función required() de arriba y al menos PORT y DATABASE_URL.

  2. Crea un .env.example y añade .env al .gitignore.

  3. Añade scripts a package.json: "dev": "node --watch src/server.js" y "start": "node src/server.js".

  4. Arranca sin DATABASE_URL y comprueba que el proceso muere con un mensaje claro.


Entregable: tu config.js, tu .env.example y una captura del error al faltar una variable.



Para recordar

  • La configuración va en el entorno, no en el código.
  • .env nunca se sube; .env.example sí.
  • Valida todas las variables al arrancar y falla rápido con un mensaje útil.
Texto Leccion 2/12
Estas viendo
Estructura de proyecto, env vars y configuracion
Hablar por WhatsAppContactar por WhatsApp