wangzhibo
2026-05-09 53418655c061ac26f66058253f39200aced1ab1d
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
import express from "express";
import session from "express-session";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { loadAppConfig } from "./config/loadConfig.js";
import { createBoardRouter } from "./routes/boardRouter.js";
 
const __dirname = path.dirname(fileURLToPath(import.meta.url));
 
export function createApp() {
  const appCfg = loadAppConfig();
  const app = express();
 
  if (appCfg.trustProxy) {
    app.set("trust proxy", 1);
  }
 
  app.use(
    session({
      name: "board.sid",
      secret: appCfg.sessionSecret,
      resave: false,
      saveUninitialized: false,
      cookie: {
        path: "/",
        httpOnly: true,
        secure: appCfg.cookieSecure,
        sameSite: appCfg.cookieSameSite,
        maxAge: appCfg.sessionMaxAgeMs,
      },
    })
  );
 
  app.set("views", path.join(__dirname, "../views"));
  app.set("view engine", "ejs");
 
  app.use("/board", createBoardRouter(appCfg));
 
  app.use((_req, res) => {
    res.status(404).send("Not Found");
  });
 
  return { app, appCfg };
}