Files
ofertaweb.cl/backend/server.js
cesar 2a88b4a71b Initial commit: Estructura backend y frontend con estándar VPS
- 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)
2025-12-09 00:35:46 -03:00

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}`);
});