Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
1 lines (1 loc) · 1.94 KB
/
Copy pathserver.js
File metadata and controls
1 lines (1 loc) · 1.94 KB
1
require("dotenv").config();const http=require("http"),express=require("express"),cors=require("cors"),helmet=require("helmet"),morgan=require("morgan"),path=require("path"),{Server}=require("socket.io"),jwt=require("jsonwebtoken"),User=require("./models/User"),connectDB=require("./config/db"),errorHandler=require("./middleware/errorHandler");const app=express(),server=http.createServer(app),io=new Server(server,{cors:{origin:process.env.CLIENT_ORIGIN||"*",methods:["GET","POST","PUT","PATCH","DELETE"]}});app.set("io",io);app.use(helmet({contentSecurityPolicy:false}));app.use(cors({origin:process.env.CLIENT_ORIGIN||true}));app.use(express.json({limit:"1mb"}));app.use(morgan("dev"));app.use(express.static(path.join(__dirname,"public")));io.use(async(s,n)=>{try{const t=s.handshake.auth?.token;if(!t)return n(new Error("Authentication required"));const d=jwt.verify(t,process.env.JWT_SECRET),u=await User.findById(d.id).select("-password");if(!u)return n(new Error("User not found"));s.user=u;n()}catch(e){n(new Error("Invalid socket authentication"))}});io.on("connection",s=>{s.join("user:"+s.user._id);s.on("project:join",id=>s.join("project:"+id));s.on("project:leave",id=>s.leave("project:"+id))});app.get("/api/health",(q,r)=>r.json({success:true,message:"Project Management API is running"}));app.use("/api/auth",require("./routes/authRoutes"));app.use("/api/projects",require("./routes/projectRoutes"));app.use("/api/tasks",require("./routes/taskRoutes"));app.use("/api/comments",require("./routes/commentRoutes"));app.use("/api/notifications",require("./routes/notificationRoutes"));app.use((q,r)=>r.status(404).json({success:false,message:"Route not found"}));app.use(errorHandler);const PORT=process.env.PORT||5000;async function start(){try{await connectDB();server.listen(PORT,()=>console.log("Server running on port "+PORT))}catch(e){console.error("Failed to start:",e.message);process.exit(1)}}if(require.main===module)start();module.exports={app,server,io,start};