Files
acs/server/index.ts
2026-07-14 15:58:56 +09:00

51 lines
1.3 KiB
TypeScript

import path from 'node:path';
import express from 'express';
import cookieParser from 'cookie-parser';
import session from 'express-session';
import connectPgSimple from 'connect-pg-simple';
import { env } from './config/env.js';
import { apiRouter } from './routes/index.js';
import { platformStatusRouter } from './routes/health.js';
import { errorHandler } from './http/errors.js';
import { getPool } from './db/pool.js';
const app = express();
const frontendDist = path.resolve(process.cwd(), 'frontend', 'dist');
const PgSession = connectPgSimple(session);
app.disable('x-powered-by');
app.set('trust proxy', 1);
app.use(express.json({ limit: '1mb' }));
app.use(cookieParser());
app.use(session({
name: 'acs.sid',
secret: env.sessionSecret,
resave: false,
saveUninitialized: false,
store: new PgSession({
pool: getPool(),
tableName: 'user_sessions',
createTableIfMissing: true,
}),
cookie: {
httpOnly: true,
sameSite: 'lax',
secure: env.cookieSecure,
maxAge: 1000 * 60 * 60 * 8,
},
}));
app.use(platformStatusRouter);
app.use('/api', apiRouter);
app.use(express.static(frontendDist));
app.get('*', (_req, res) => {
res.sendFile(path.join(frontendDist, 'index.html'));
});
app.use(errorHandler);
app.listen(env.port, () => {
console.log(`ACS Node app listening on port ${env.port}`);
});