| 18 | |
| 19 | // The Express app is exported so that it can be used by serverless Functions. |
| 20 | export function app(): express.Express { |
| 21 | const server = express(); |
| 22 | const serverDistFolder = dirname(fileURLToPath(import.meta.url)); |
| 23 | const browserDistFolder = resolve(serverDistFolder, '../browser'); |
| 24 | const indexHtml = join(serverDistFolder, 'index.server.html'); |
| 25 | const indexHtmlContent = readFileSync(indexHtml, 'utf-8'); |
| 26 | |
| 27 | server.set('trust proxy', 'loopback'); |
| 28 | |
| 29 | server.engine( |
| 30 | 'html', |
| 31 | ngExpressEngine({ |
| 32 | bootstrap, |
| 33 | }), |
| 34 | ); |
| 35 | |
| 36 | server.set('view engine', 'html'); |
| 37 | server.set('views', browserDistFolder); |
| 38 | |
| 39 | // Serve static files from /browser |
| 40 | server.get( |
| 41 | /.*\..*/, |
| 42 | express.static(browserDistFolder, { |
| 43 | maxAge: '1y', |
| 44 | }), |
| 45 | ); |
| 46 | |
| 47 | // All regular routes use the Universal engine |
| 48 | server.get(/.*/, (req, res) => { |
| 49 | res.render(indexHtml, { |
| 50 | req, |
| 51 | providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }], |
| 52 | }); |
| 53 | }); |
| 54 | |
| 55 | server.use(defaultExpressErrorHandlers(indexHtmlContent)); |
| 56 | |
| 57 | return server; |
| 58 | } |
| 59 | |
| 60 | function run() { |
| 61 | const port = process.env['PORT'] || 4000; |