
Capacidades
- API documentada
- Subida de ficheros
- Autenticación JWT
Frontend
Backend
NodePop
CompletadoNodePop es una plataforma de compraventa de artículos de segunda mano construida como dos proyectos separados: una API REST en Express con TypeScript y MongoDB, y una SPA en React con Vite. Publicar, buscar, filtrar por etiquetas y rango de precio, subir fotos y gestionar la sesión, con la lógica de filtrado resuelta en servidor.
El reto
El listado tenía que escalar sin traerse la colección entera al navegador, y la SPA tenía que reaccionar a una sesión caducada desde cualquier pantalla sin acoplar la capa de red al árbol de componentes.
Implementación
Filtrado, orden y paginación en servidor
El listado acepta búsqueda por nombre, etiquetas múltiples, rango de precio, disponibilidad, orden por varios campos y paginación con límite máximo, de modo que el cliente nunca descarga más de lo que enseña.
Subida y servicio de imágenes
Fotos subidas con multer en multipart, un endpoint dedicado que las sirve con caché de 24 horas y URLs absolutas construidas a partir de la URL pública configurada, para que funcionen igual en local y en producción.
Sesión que se propaga por eventos
Un único cliente Axios centraliza el token y emite un evento cuando el servidor responde 401. El árbol de React se entera de la sesión caducada sin que la capa de red conozca el contexto de autenticación.
Redirección limpia tras el login
El guard de rutas privadas memoriza la ruta desde la que se expulsó al usuario y lo devuelve exactamente ahí después de identificarse, en lugar de soltarlo en la home.
API endurecida
Helmet, CORS por lista de orígenes permitidos, rate limit de 20 peticiones cada 15 minutos en login y registro, validación con express-validator y arranque abortado en producción si falta el secreto JWT.
Contraseñas que no salen nunca
El hash bcrypt está marcado como no seleccionable en el esquema y además se elimina en la serialización a JSON, así que ninguna respuesta puede filtrarlo por descuido.
Documentación y mensajes traducidos
Especificación Swagger generada desde anotaciones en el propio código, e i18n en los mensajes de error de la API.