-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.ts
61 lines (48 loc) · 2.2 KB
/
app.ts
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
import cors from 'cors';
import express, { NextFunction, Request, Response } from 'express';
import correlator from 'express-correlation-id';
import mustacheExpress from 'mustache-express';
import { checkConfigConsistency, config } from './config/config';
import { NaisCluster } from './config/nais-cluster';
import { buildDirectory } from './context.js';
import { setupDeprecatedEndpoints } from './deprecatedEndpoints.js';
import expressJsonMetricHandler from './middleware/expressJsonMetricHandler';
import globalErrorHandler from './middleware/globalErrorHandler.js';
import httpRequestLogger from './middleware/httpRequestLogger.js';
import { stripTrailingSlash } from './middleware/stripTrailingSlash';
import renderIndex from './renderIndex';
import apiRouter from './routers/api/index';
import internalRouter from './routers/internal/index.js';
import { setupDevServer } from './setup-dev-server';
export const createApp = (setupDev: boolean = false) => {
checkConfigConsistency(config);
const app = express();
app.use(httpRequestLogger);
app.use(expressJsonMetricHandler(express.json({ limit: '50mb' })));
app.use(express.urlencoded({ extended: true, limit: '50mb' }));
app.use(correlator() as any);
app.use(cors());
app.set('views', buildDirectory);
app.set('view engine', 'mustache');
app.engine('html', mustacheExpress());
const fyllutRouter = express.Router();
if (config.naisClusterName === NaisCluster.DEV || setupDev) {
setupDevServer(app, fyllutRouter, config);
}
fyllutRouter.use('/', express.static(buildDirectory, { index: false }));
setupDeprecatedEndpoints(fyllutRouter);
fyllutRouter.use('/api', apiRouter);
// path /internal is not publicly exposed, see https://doc.nais.io/clusters/gcp/#prod-gcp-ingresses
fyllutRouter.use('/internal', internalRouter);
stripTrailingSlash(fyllutRouter);
// Get the form id
fyllutRouter.use('/:formId', (req: Request, res: Response, next: NextFunction) => {
res.locals.formId = req.params.formId;
next();
});
// Match everything except internal, static and api
fyllutRouter.use(/^(?!.*\/(internal|static|api)\/).*$/, renderIndex);
app.use(config.fyllutPath, fyllutRouter);
app.use(globalErrorHandler);
return app;
};