- Backend migrado a estructura VPS (src/ subfolder) - Frontend con estructura Vite + React 19 + Tailwind - Configuración PostgreSQL con Pool - API service con interceptores JWT - Ambos servidores funcionando (backend:3001, frontend:5173)
87 lines
2.4 KiB
JavaScript
87 lines
2.4 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
require('dotenv').config({ path: __dirname + '/.env' });
|
|
|
|
const errorHandler = require('./src/middlewares/errorHandler');
|
|
const logger = require('./src/utils/logger');
|
|
|
|
const app = express();
|
|
|
|
// Middlewares globales
|
|
app.use(cors({
|
|
origin: [process.env.FRONTEND_URL, process.env.ADMIN_URL],
|
|
credentials: true
|
|
}));
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
// Servir archivos estáticos (imágenes de productos)
|
|
app.use('/uploads', express.static('public/uploads'));
|
|
|
|
// Logger de requests
|
|
app.use((req, res, next) => {
|
|
logger.info(`${req.method} ${req.path}`, {
|
|
ip: req.ip,
|
|
userAgent: req.get('user-agent')
|
|
});
|
|
next();
|
|
});
|
|
|
|
// Rutas
|
|
const authRoutes = require('./src/routes/authRoutes');
|
|
const productRoutes = require('./src/routes/productRoutes');
|
|
const categoryRoutes = require('./src/routes/categoryRoutes');
|
|
const inventoryRoutes = require('./src/routes/inventoryRoutes');
|
|
const orderRoutes = require('./src/routes/orderRoutes');
|
|
const cartRoutes = require('./src/routes/cartRoutes');
|
|
const uploadRoutes = require('./src/routes/uploadRoutes');
|
|
|
|
app.use('/api/auth', authRoutes);
|
|
app.use('/api/products', productRoutes);
|
|
app.use('/api/categories', categoryRoutes);
|
|
app.use('/api/inventory', inventoryRoutes);
|
|
app.use('/api/orders', orderRoutes);
|
|
app.use('/api/cart', cartRoutes);
|
|
app.use('/api/upload', uploadRoutes);
|
|
|
|
// Health check
|
|
app.get('/health', (req, res) => {
|
|
res.json({
|
|
status: 'OK',
|
|
environment: process.env.NODE_ENV,
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
});
|
|
|
|
// Ruta raíz
|
|
app.get('/', (req, res) => {
|
|
res.json({
|
|
name: 'OfertaWeb API',
|
|
version: '1.0.0',
|
|
endpoints: {
|
|
auth: '/api/auth',
|
|
products: '/api/products',
|
|
categories: '/api/categories',
|
|
inventory: '/api/inventory',
|
|
orders: '/api/orders',
|
|
cart: '/api/cart',
|
|
upload: '/api/upload'
|
|
}
|
|
});
|
|
});
|
|
|
|
// Manejo de rutas no encontradas
|
|
app.use((req, res) => {
|
|
res.status(404).json({ error: 'Ruta no encontrada' });
|
|
});
|
|
|
|
// Middleware de manejo de errores (debe estar al final)
|
|
app.use(errorHandler);
|
|
|
|
const PORT = process.env.PORT || 3000;
|
|
app.listen(PORT, () => {
|
|
console.log(`🚀 Servidor OfertaWeb corriendo en puerto ${PORT}`);
|
|
console.log(`📝 Ambiente: ${process.env.NODE_ENV || 'development'}`);
|
|
logger.info(`Servidor iniciado en puerto ${PORT}`);
|
|
});
|