Implementing Server-Side Rendering with Angular Universal

Present an example of setting up Angular Universal for server-side rendering to send pre-rendered pages to the client, enhancing mobile load times and SEO.
npm install @nguniversal/express-engine --save
Install the required packages for Angular Universal, which includes the '@nguniversal/express-engine' package for server-side rendering with Express.
ng add @nguniversal/express-engine --clientProject angular-universal-example
Use the Angular CLI to add Angular Universal to your project, specifying the client project name if it is different from the default.
const express = require('express');
const ngUniversal = require('@nguniversal/express-engine');
const { provideModuleMap } = require('@nguniversal/module-map-ngfactory-loader');

const app = express();
const port = process.env.PORT || 4000;
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main');

app.engine('html', ngUniversal.ngExpressEngine({
  bootstrap: AppServerModuleNgFactory,
  providers: [provideModuleMap(LAZY_MODULE_MAP)]

app.set('view engine', 'html');
app.set('views', 'dist/browser');

app.get('*.*', express.static('dist/browser', {
  maxAge: '1y'

app.get('*', (req, res) => {
  res.render('index', { req });

app.listen(port, () => {
  console.log(`Listening on http://localhost:${port}`);
Create a simple Express server that uses Angular Universal for rendering Angular applications server-side. We set up an engine for '.html' files to use the ngExpressEngine with AppServerModuleNgFactory and the lazy loading map. Static files are served from the 'dist/browser' directory, and all other requests are rendered server-side and returned as HTML responses.
npm run build:ssr && npm run serve:ssr
Build the server-side rendered version of the application and then serve it using Node.js.