Doplax.Dev
← Volver a proyectos
NodePop

Capacidades

  • API documentada
  • Subida de ficheros
  • Autenticación JWT

Frontend

ReactReact
TypeScriptTypeScript

Backend

Node.jsNode.js
TypeScriptTypeScript
MongoDBMongoDB
SwaggerSwagger
JWTJWT

NodePop

Completado

NodePop 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.