Files
Michess/server/src/server.ts
2023-03-19 20:44:01 +08:00

57 lines
1.4 KiB
TypeScript

import "dotenv/config";
import cors from "cors";
import type { Request, Response, NextFunction } from "express";
import express from "express";
import { createServer } from "http";
import session from "./middleware/session.js";
import { Server } from "socket.io";
import { init as initSocket } from "./socket/index.js";
import { db, INIT_TABLES } from "./db/index.js";
import routes from "./routes/index.js";
const corsConfig = {
origin: process.env.CORS_ORIGIN || "http://localhost:3000",
credentials: true
};
const app = express();
const server = createServer(app);
// database
await db.connect();
db.query(INIT_TABLES, (err) => {
if (err) {
console.error(err);
} else {
console.log("Tables initialized");
}
});
// middleware
app.use(cors(corsConfig));
app.use(express.json());
app.set("trust proxy", 1);
app.use(session);
app.use("/v1", routes);
// socket.io
export const io = new Server(server, { cors: corsConfig, pingInterval: 30000, pingTimeout: 50000 });
io.use((socket, next) => {
session(socket.request as Request, {} as Response, next as NextFunction);
});
io.use((socket, next) => {
const session = socket.request.session;
if (session && session.user) {
next();
} else {
console.log("io.use: no session");
socket.disconnect();
}
});
initSocket();
const port = process.env.PORT || 3001;
server.listen(port, () => {
console.log(`chessu api server listening on :${port}`);
});