Spaces:
Runtime error
Runtime error
File size: 1,723 Bytes
2671e04 e43a4a9 2671e04 e43a4a9 8b5482f e43a4a9 2671e04 e43a4a9 | 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 | import path from "node:path";
import express from "express";
import { createApiRouter } from "./routes/apiRouter.js";
import { HttpError } from "./utils/httpError.js";
export function createApp({
jsonLimit,
publicDir,
chatController,
mediaController
}) {
const app = express();
app.disable("x-powered-by");
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS");
const requestedHeaders = req.get("access-control-request-headers");
res.setHeader("Access-Control-Allow-Headers", requestedHeaders || "Content-Type, Authorization");
if (req.method === "OPTIONS") {
res.status(204).end();
return;
}
next();
});
app.use(express.json({ limit: jsonLimit }));
app.get("/", (_req, res) => {
res.sendFile(path.join(publicDir, "index.html"));
});
app.get(["/chatclient", "/chatclient/"], (_req, res) => {
res.sendFile(path.join(publicDir, "chatclient", "index.html"));
});
app.get(["/chat", "/chat/"], (_req, res) => {
res.redirect(302, "/chatclient/");
});
app.use(express.static(publicDir, {
extensions: ["html"],
index: false,
redirect: false
}));
app.use("/v1", createApiRouter({ chatController, mediaController }));
app.use((req, _res, next) => {
next(new HttpError(404, `Route not found: ${req.method} ${req.originalUrl}`));
});
app.use((error, _req, res, _next) => {
const statusCode = error.statusCode ?? 500;
res.status(statusCode).json({
error: {
message: error.message ?? "Internal server error",
details: error.details ?? null
}
});
});
return app;
}
|