forked from Mahakisore7/Dev-Hack-Backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
125 lines (101 loc) · 3.64 KB
/
server.js
File metadata and controls
125 lines (101 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// import express from "express";
// import "dotenv/config";
// import cors from "cors";
// import http from "http";
// import { Server } from "socket.io";
// import { connectDB } from "./lib/db.js";
// import userRouter from "./routes/userRoutes.js";
// import adminRoutes from "./routes/adminRoutes.js";
// import incidentRouter from "./routes/incidentRoutes.js";
// const app = express();
// const server = http.createServer(app);
// // Socket.io Setup (Crucial for the Admin Map)
// const io = new Server(server, {
// cors: { origin: "*" }
// });
// app.set("socketio", io);
// app.use(cors({
// origin: "https://resqq.netlify.app", // Replace with your frontend URL if different
// methods: ["GET", "POST", "PUT", "DELETE"],
// credentials: true,
// allowedHeaders: ["Content-Type", "token"] // Ensure "token" is allowed if you use it in headers
// }));
// app.use(express.json({limit:"4mb"}));
// // DB Connection
// connectDB();
// // Routes
// app.use("/api/status", (req, res) => {
// res.send("Emergency Server is Live");
// });
// // --- MOUNT ROUTES ---
// app.use("/api/auth", userRouter); // Users Login/Signup
// app.use("/api/admin", adminRoutes); // Admin Dashboard Logic
// app.use("/api/incidents", incidentRouter);
// // Socket.io Connection Logic
// io.on("connection", (socket) => {
// console.log("📡 Admin/Responder connected: " + socket.id);
// });
// const PORT = process.env.PORT || 5000;
// server.listen(PORT, () => {
// console.log(`🚀 Server running on http://localhost:${PORT}`);
// });
import express from "express";
import "dotenv/config";
import cors from "cors";
import http from "http";
import { Server } from "socket.io";
import { connectDB } from "./lib/db.js";
import userRouter from "./routes/userRoutes.js";
import adminRoutes from "./routes/adminRoutes.js";
import incidentRouter from "./routes/incidentRoutes.js";
const app = express();
const server = http.createServer(app);
// 🟢 1. UNIFIED CORS CONFIGURATION
// Note: Ensure NO trailing slash at the end of the URL
const allowedOrigins = [
"https://resqq.netlify.app",
"http://localhost:5173"
];
const corsOptions = {
origin: function (origin, callback) {
// Allow requests with no origin (like mobile apps or Postman)
if (!origin) return callback(null, true);
if (allowedOrigins.indexOf(origin) !== -1) {
callback(null, true);
} else {
console.log("CORS Blocked Origin:", origin);
callback(new Error('Not allowed by CORS'));
}
},
methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"], // Added OPTIONS for preflight
credentials: true,
allowedHeaders: ["Content-Type", "token", "Authorization"] // Added Authorization for safety
};
// 🟢 2. APPLY TO SOCKET.IO
const io = new Server(server, {
cors: corsOptions
});
app.set("socketio", io);
// 🟢 3. APPLY TO EXPRESS MIDDLEWARE
app.use(cors(corsOptions));
app.use(express.json({ limit: "4mb" }));
// DB Connection
connectDB();
// Routes
app.use("/api/status", (req, res) => {
res.send("Emergency Server is Live");
});
// --- MOUNT ROUTES ---
app.use("/api/auth", userRouter); // Users Login/Signup
app.use("/api/admin", adminRoutes); // Admin Dashboard Logic
app.use("/api/incidents", incidentRouter);
// Socket.io Connection Logic
io.on("connection", (socket) => {
console.log("📡 Admin/Responder connected: " + socket.id);
});
// 🟢 4. DYNAMIC PORT FOR RENDER
// Render provides the PORT env variable; hardcoding 5000 will fail in production
const PORT = process.env.PORT || 5000;
server.listen(PORT, "0.0.0.0", () => {
console.log(`🚀 Server running on port ${PORT}`);
});