chore: add server/index.ts
This commit is contained in:
parent
2fb134f42b
commit
1f5d34aab5
1 changed files with 65 additions and 0 deletions
65
server/index.ts
Normal file
65
server/index.ts
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
import express, { type Request, Response, NextFunction } from "express";
|
||||
import session from "express-session";
|
||||
import connectPgSimple from "connect-pg-simple";
|
||||
import { pool } from "./db";
|
||||
import { registerRoutes } from "./routes";
|
||||
import { createServer } from "http";
|
||||
|
||||
const app = express();
|
||||
const httpServer = createServer(app);
|
||||
|
||||
app.use(express.json({ limit: "2mb" }));
|
||||
app.use(express.urlencoded({ extended: false }));
|
||||
|
||||
// ── Session ────────────────────────────────────────────────────────────────────
|
||||
const PgSession = connectPgSimple(session);
|
||||
|
||||
app.use(
|
||||
session({
|
||||
store: new PgSession({
|
||||
pool,
|
||||
tableName: "user_sessions",
|
||||
createTableIfMissing: true,
|
||||
}),
|
||||
secret: process.env.SESSION_SECRET || "change-me-in-production",
|
||||
resave: false,
|
||||
saveUninitialized: false,
|
||||
cookie: {
|
||||
secure: process.env.NODE_ENV === "production",
|
||||
httpOnly: true,
|
||||
maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
// ── API Routes ─────────────────────────────────────────────────────────────────
|
||||
registerRoutes(app);
|
||||
|
||||
// ── Error Handler ─────────────────────────────────────────────────────────────
|
||||
app.use((err: any, _req: Request, res: Response, _next: NextFunction) => {
|
||||
const status = err.status || err.statusCode || 500;
|
||||
const message = err.message || "Internal Server Error";
|
||||
console.error(`[error] ${status} —`, message);
|
||||
res.status(status).json({ error: message });
|
||||
});
|
||||
|
||||
// ── Dev/Prod Vite ─────────────────────────────────────────────────────────────
|
||||
async function start() {
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
const { setupVite } = await import("./vite");
|
||||
await setupVite(httpServer, app);
|
||||
} else {
|
||||
const { serveStatic } = await import("./vite");
|
||||
serveStatic(app);
|
||||
}
|
||||
|
||||
const port = parseInt(process.env.PORT || "5000");
|
||||
httpServer.listen(port, "0.0.0.0", () => {
|
||||
console.log(`[notshop] Running on port ${port} (${process.env.NODE_ENV || "development"})`);
|
||||
});
|
||||
}
|
||||
|
||||
start().catch((err) => {
|
||||
console.error("[notshop] Failed to start:", err);
|
||||
process.exit(1);
|
||||
});
|
||||
Loading…
Add table
Reference in a new issue