Saltar al contenido
Curso de Node.js y APIs
Todos los cursos

Ejercicio: Despliegue de tu API

  • ⏱ 45 minutos
  • 📶 Nivel: intermedio

Objetivo

Preparar tu API para producción (script start, puerto, .gitignore, ruta de salud, instalación limpia) y escribir en JavaScript puro cinco utilidades de configuración y verificación.

Cómo se trabaja

La parte A es práctica real: deja lista tu API y, si quieres, publícala en una plataforma gratuita. Publicar de verdad es opcional (requiere cuentas externas); la preparación sí es obligatoria. La parte B son cinco funciones de JavaScript puro. Pega solo el JavaScript, sin <script>.

▶ Prueba tu código aquí (opcional)
Consola

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: npm ci falla

Significa que package.json y package-lock.json no coinciden. Ejecuta npm install para regenerar el lock y vuelve a intentarlo.

💡 Pista 2: validarPackage

Usa pkg.scripts?.start: el ?. evita un error si no existe scripts. Añade los problemas en el orden pedido.

💡 Pista 3: urlPublica

Las expresiones regulares /\/+$/ (barras al final) y /^\/+/ (barras al inicio) sirven para limpiar con replace.

🔎 Comprueba tu trabajo

Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.

    ✅ Ver una solución posible

    Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

    despliegue.js
    function validarPackage(pkg) {
      const problemas = [];
      if (!pkg.scripts?.start) problemas.push("falta el script start");
      if (!pkg.engines?.node) problemas.push("falta engines.node");
      if (pkg.dependencies?.nodemon) problemas.push("nodemon debe ir en devDependencies");
      return problemas;
    }
    
    function faltanVariables(env, requeridas) {
      return requeridas.filter((nombre) => !env[nombre]);
    }
    
    function configurarProduccion(env) {
      return {
        puerto: Number(env.PORT) || 3000,
        esProduccion: env.NODE_ENV === "production",
        origenes: (env.ORIGENES ?? "")
          .split(",")
          .map((o) => o.trim())
          .filter(Boolean),
      };
    }
    
    function crearRespuestaSalud(inicioMs, ahoraMs) {
      return {
        estado: "ok",
        uptimeSegundos: Math.floor((ahoraMs - inicioMs) / 1000),
      };
    }
    
    function urlPublica(base, ruta) {
      return base.replace(/\/+$/, "") + "/" + ruta.replace(/^\/+/, "");
    }

    💡 🏁 Reto extra (opcional)

    Añade a configurarProduccion un campo host que valga "0.0.0.0" en producción y "localhost" en desarrollo, y úsalo en app.listen(PORT, HOST, ...).