Ejercicio: Despliegue de tu API
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>.
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.
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, ...).