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.