115 lines
2.9 KiB
TypeScript
115 lines
2.9 KiB
TypeScript
// Importar los paquetes necesarios de Express y otros módulos
|
|
import express, { Application, urlencoded, json } from "express";
|
|
import http from "http";
|
|
import { Server, Socket } from "socket.io";
|
|
import cors from "cors";
|
|
import { RegisterRoutes } from "../build/routes";
|
|
import dotenv from "dotenv";
|
|
import path from "path";
|
|
|
|
dotenv.config();
|
|
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
/*
|
|
const corsOptions = {
|
|
origin: "*",
|
|
optionsSuccessStatus: 200,
|
|
};
|
|
*/
|
|
const corsOptions = {
|
|
origin: `${process.env.CORS_ALLOWED_ORIGIN}`,
|
|
allowedHeaders: ["Content-Type", "Authorization"],
|
|
};
|
|
|
|
// Crear una nueva instancia de la aplicación de Express
|
|
const app: Application = express();
|
|
|
|
app.use(cors(corsOptions));
|
|
|
|
const server = http.createServer(app);
|
|
const io = new Server(server, {
|
|
cors: {
|
|
origin: "*", // ajustar según necesidad
|
|
},
|
|
});
|
|
|
|
//app.use("/docs", swaggerUi.serve, async (_req: ExRequest, res: ExResponse) => {
|
|
// return res.send(swaggerUi.generateHTML(await import("../build/swagger.json")));
|
|
//});
|
|
|
|
app.use(
|
|
urlencoded({
|
|
extended: true,
|
|
})
|
|
);
|
|
|
|
app.use(json());
|
|
|
|
app.use((req, _res, next) => {
|
|
if (req.path === '/companies/create') {
|
|
require('fs').writeFileSync('request_log.json', JSON.stringify({ body: req.body, headers: req.headers }, null, 2));
|
|
}
|
|
next();
|
|
});
|
|
|
|
RegisterRoutes(app);
|
|
|
|
app.use(function errorHandler(
|
|
err: unknown,
|
|
req: express.Request,
|
|
res: express.Response,
|
|
next: express.NextFunction
|
|
): express.Response | void {
|
|
if (err instanceof Error && err.name === "ValidateError") {
|
|
console.warn(`Caught Validation Error for ${req.path}:`, (err as any).fields);
|
|
return res.status(422).json({
|
|
message: "Validation Failed",
|
|
details: (err as any)?.fields,
|
|
});
|
|
}
|
|
if (err instanceof Error) {
|
|
console.error("Global Error:", err);
|
|
return res.status(500).json({
|
|
message: "Internal Server Error",
|
|
details: err.message
|
|
});
|
|
}
|
|
next();
|
|
});
|
|
|
|
// Escuchar conexiones
|
|
io.on("connection", (socket: Socket) => {
|
|
const userId = socket.handshake.auth.userId as string;
|
|
|
|
if (!userId) {
|
|
console.log("Conexión rechazada: no se proporcionó userId");
|
|
socket.disconnect();
|
|
return;
|
|
}
|
|
|
|
console.log(`Usuario ${userId} conectado con socket ${socket.id}`);
|
|
|
|
socket.join(`user:${userId}`);
|
|
|
|
socket.on("disconnect", () => {
|
|
console.log(`Usuario ${userId} desconectado`);
|
|
});
|
|
});
|
|
|
|
//Servir la carpeta de archivos para usuarios registrados.
|
|
const filePath = path.join(__dirname, "../uploads");
|
|
//app.use("/public", authenticateMiddleware, express.static(filePath));
|
|
app.use("/public", express.static(filePath)); //without authentication
|
|
|
|
// Iniciar el servidor de Express
|
|
app.listen(PORT, () => {
|
|
console.log(`Servidor iniciado en http://localhost:${PORT}`);
|
|
});
|
|
|
|
server.listen(3001, () => {
|
|
console.log(`Servidor de chat en http://localhost:${3001}`);
|
|
});
|
|
|
|
export { server, io };
|