| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import 'zone.js/node';
- import { APP_BASE_HREF } from '@angular/common';
- import { CommonEngine } from '@angular/ssr/node';
- import express from 'express';
- import { existsSync } from 'node:fs';
- import { join } from 'node:path';
- import <% if (isStandalone) { %>bootstrap<% } else { %>AppServerModule<% } %> from './main.server';
- // The Express app is exported so that it can be used by serverless Functions.
- export function app(): express.Express {
- const server = express();
- const distFolder = join(process.cwd(), '<%= browserDistDirectory %>');
- const indexHtml = existsSync(join(distFolder, 'index.original.html'))
- ? join(distFolder, 'index.original.html')
- : join(distFolder, 'index.html');
- const commonEngine = new CommonEngine();
- server.set('view engine', 'html');
- server.set('views', distFolder);
- // Example Express Rest API endpoints
- // server.get('/api/{*splat}', (req, res) => { });
- // Serve static files from /browser
- server.use(express.static(distFolder, {
- maxAge: '1y',
- index: false,
- }));
- // All regular routes use the Angular engine
- server.use((req, res, next) => {
- const { protocol, originalUrl, baseUrl, headers } = req;
- commonEngine
- .render({
- <% if (isStandalone) { %>bootstrap<% } else { %>bootstrap: AppServerModule<% } %>,
- documentFilePath: indexHtml,
- url: `${protocol}://${headers.host}${originalUrl}`,
- publicPath: distFolder,
- providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
- })
- .then((html) => res.send(html))
- .catch((err) => next(err));
- });
- return server;
- }
- function run(): void {
- const port = process.env['PORT'] || 4000;
- // Start up the Node server
- const server = app();
- server.listen(port, (error) => {
- if (error) {
- throw error;
- }
- console.log(`Node Express server listening on http://localhost:${port}`);
- });
- }
- // Webpack will replace 'require' with '__webpack_require__'
- // '__non_webpack_require__' is a proxy to Node 'require'
- // The below code is to ensure that the server is run only when not requiring the bundle.
- declare const __non_webpack_require__: NodeRequire;
- const mainModule = __non_webpack_require__.main;
- const moduleFilename = mainModule && mainModule.filename || '';
- if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
- run();
- }
- export default <% if (isStandalone) { %>bootstrap<% } else { %>AppServerModule<% } %>;
|