Aplicación web full stack para publicar y administrar una galería de fotografías, con API REST en Node.js y frontend en Angular.
- Descripción
- Estado del proyecto
- Características
- Tecnologías
- Requisitos
- Instalación
- Uso
- Estructura del proyecto
- Licencia
- Autor
Proyecto que combina Angular en el frontend con una API Express que persiste datos en PostgreSQL mediante el ORM Sequelize. La galería es pública, y un panel de administración protegido por login permite crear, editar y subir imágenes de fotografías.
Ejercicio académico. Proyecto de práctica que combina Angular, Express y Sequelize; no recibe desarrollo activo.
- Galería pública paginada (
/home/:num). - Login con JWT (
njwt) y rutas de administración protegidas por guard (/admin/list,/admin/new,/admin/edit/:id). - CRUD de fotografías con subida de imagen y generación de miniaturas (
sharp). - Modelos Sequelize
usuariosyfotografias. - Frontend con Angular Material, Bootstrap y soporte SSR.
- Frontend: Angular 22, Angular Material, Bootstrap 5, RxJS, TypeScript 6.0
- Backend: Node.js, Express 4, Sequelize 6,
pg,njwt,multer - Base de datos: PostgreSQL
- Node.js 22.22.3+, 24.15+ o 26+ (lo exige Angular 22) y npm
- PostgreSQL con una base de datos llamada
galeria-fotografias(configurable conDB_NAME)
git clone https://github.com/ViceAguilera/Angular-NodeJS-PostgreSQL-Sequelize.git
cd Angular-NodeJS-PostgreSQL-Sequelize
cd Backend && npm install
cd ../Frontend && npm installCopia Backend/.env.example a Backend/.env y completa las variables:
PORT=8010
DB_HOST=127.0.0.1
DB_PORT=5432
DB_NAME=galeria-fotografias
DB_USER=postgres
DB_PASSWORD= # Contraseña de PostgreSQL
TOKEN_SECRET= # Obligatorio: secreto para firmar los JWT
Genera un TOKEN_SECRET largo y aleatorio con node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))". Sin él, el backend no arranca. La lectura de estas variables está en Backend/server/config/config.js.
El proyecto no incluye migraciones ni sync(), por lo que las tablas usuarios y fotografias deben existir según los modelos de Backend/server/models/.
Backend (puerto 8010 por defecto, o la variable PORT):
cd Backend
npm run dev # con nodemon
npm start # sin nodemonFrontend (espera la API en http://localhost:8010/api/, definida en Frontend/src/app/services/global.ts):
cd Frontend
npm startBackend/
bin/main.js # Arranque del servidor HTTP
app.js # Express, CORS y registro de rutas
server/
auth/ # Middleware de autenticación JWT
config/config.js # Configuración de base de datos y JWT desde variables de entorno
controllers/ # Lógica de usuarios y fotografías
models/ # Modelos Sequelize
routes/ # Rutas /api/...
uploads/ # Imágenes subidas y miniaturas
Frontend/
src/app/components/ # Home, login, admin, listado y formularios
src/app/services/ # Servicios HTTP, auth y guard
Distribuido bajo la licencia MIT. Ver LICENSE.
Vicente Aguilera Arias — Portafolio · GitHub · LinkedIn
