Servers and Services

Clase 25 de 28Curso para Certificacion de Node.js con OpenJS Foundation 2023

Resumen

Domina el dominio Server and Services del J-- NSD con un enfoque práctico en Node y Fastify. Aquí aprenderás a levantar un servidor, crear un endpoint /users y manejar códigos HTTP críticos, siguiendo solo la documentación oficial del framework y aprovechando el ecosistema de plugins compatibles con NPM.

¿Qué evalúa server and services y por qué pesa 70 %?

Este dominio concentra la mayor parte de los ejercicios y requiere escribir bastante código. Se enfoca en construir aplicativos web con Node, como API Rest, dominando a fondo un framework web y su ecosistema.

  • 70 % de la prueba: principal fuente de puntaje.
  • Cuatro ejercicios: task 2.1, 2.2, 2.3 y 2.4.
  • Aplicativos con Node: API Rest y otros tipos de servicios.
  • Mucho código: resolución de problemas más complejos.
  • Documentación oficial del framework: única referencia permitida.
  • Ecosistema de plugins y módulos de NPM: puede ahorrar tiempo clave.
  • Probar cada instrucción: verificar paso a paso y ajustar.
  • Ítems críticos: omitir configuraciones como el puerto puede dar calificación cero.

¿Cómo construir el servidor en Node con Fastify y configurar el puerto?

La prioridad es que el servicio escuche en el puerto definido por la variable de entorno PORT. Si no llega, usar un respaldo (3000). Activar logger ayuda a depurar.

// server.js
const fastify = require('fastify')({ logger: true });

const port = process.env.PORT || 3000;

fastify.listen({ port })
  .then(() => fastify.log.info(`Server listening on ${port}`))
  .catch((err) => {
    fastify.log.error(err);
    process.exit(1);
  });
  • Variable de entorno PORT: lectura prioritaria, respaldo en 3000.
  • Logger activo: facilita ver errores y estados.
  • 404 automático: si la ruta no existe, Fastify responde 404 sin código extra.
  • npm start obligatorio: configurar en package.json para inicializar el servicio. Si no, la nota puede ser cero.
  • Prueba de puerto: con PORT=4000 debe escuchar en 4000; sin PORT, en 3000.

¿Cómo asegurar npm start y el puerto correcto?

  • Define el script de arranque en package.json para iniciar el servicio.
  • Verifica que el servidor lee PORT antes de iniciar.
  • Ejecuta y valida en localhost que responde según el puerto.

¿Cómo implementar el endpoint /users con validaciones y códigos http?

Se requiere un endpoint GET /users que reciba el parámetro de query username y maneje escenarios con códigos precisos. Fastify simplifica el 404 para rutas inexistentes; el resto se implementa en la ruta.

// Supone una función existente searchUser(username)
fastify.get('/users', async (request, reply) => {
  const { username } = request.query || {};

  // 400: falta username
  if (!username) {
    return reply.code(400).send();
  }

  // 406: parámetros extra en la URL
  if (Object.keys(request.query).length > 1) {
    return reply.code(406).send();
  }

  // Búsqueda del usuario
  const user = await searchUser(username);

  // 500: searchUser retornó null
  if (user == null) {
    return reply.code(500).send({ error: 'user error' });
  }

  // 200: respuesta exitosa con el JSON solicitado
  return reply.send({
    username,
    result: user
  });
});
  • 400: si falta username en la query.
  • 406: si llegan parámetros extra además de username.
  • 500: si la función searchUser retorna null.
  • 200: si todo va bien, devolver { username, result } como JSON.
  • Fastify envía 200 por defecto con reply.send(...) cuando no se indica otro código.

¿Qué errores comunes debes evitar?

  • Confiar ciegamente en asistentes como Copilot: puede sugerir variables equivocadas. Verifica que la búsqueda use la variable correcta, por ejemplo, searchUser(username).
  • Olvidar reiniciar el servicio tras cambios: reinicia y vuelve a probar.
  • No probar casos: valida 404 de rutas inexistentes, 400 sin username, 406 con query extra, 500 cuando no existe el usuario y 200 para un usuario válido.

¿Tienes dudas o quieres compartir tu enfoque con Fastify u otro framework de Node? Comenta tu estrategia y casos de prueba clave.