feat: add SSR and prerendering support #7

Merged
kfj001 merged 6 commits from feat/ssr-prerendering into main 2026-08-06 21:06:48 -07:00
Showing only changes of commit a8b6e65831 - Show all commits
+9 -3
View File
@@ -4,8 +4,13 @@ import {
isMainModule, isMainModule,
writeResponseToNodeResponse, writeResponseToNodeResponse,
} from '@angular/ssr/node'; } from '@angular/ssr/node';
import { AngularAppEngine } from '@angular/ssr';
import * as http from 'node:http'; import * as http from 'node:http';
// Enable serving prerendered static HTML from disk. Without this flag the
// engine falls back to SSR for every route, ignoring the prerendered output.
AngularAppEngine.ɵallowStaticRouteRender = true;
/** /**
* Public routes prerendered at build time (SSG — Static Site Generation). * Public routes prerendered at build time (SSG — Static Site Generation).
* These five routes are compiled to static HTML during `ng build` and * These five routes are compiled to static HTML during `ng build` and
@@ -53,7 +58,7 @@ function getEngine(): AngularNodeAppEngine {
* as pre-generated static HTML from the build output. All other routes * as pre-generated static HTML from the build output. All other routes
* fall back to server-side rendering (SSR) or the fallback 404 handler. * fall back to server-side rendering (SSR) or the fallback 404 handler.
*/ */
export default createNodeRequestHandler(async (req, res, next) => { const requestHandler = createNodeRequestHandler(async (req, res, next) => {
try { try {
const prerendered = isPrerenderedRoute(req.url || '/'); const prerendered = isPrerenderedRoute(req.url || '/');
if (prerendered) { if (prerendered) {
@@ -76,11 +81,12 @@ export default createNodeRequestHandler(async (req, res, next) => {
} }
}); });
export default requestHandler;
if (isMainModule(import.meta.url)) { if (isMainModule(import.meta.url)) {
const httpServer = http.createServer(); const httpServer = http.createServer();
httpServer.on('request', async (req: http.IncomingMessage, res: http.ServerResponse) => { httpServer.on('request', async (req: http.IncomingMessage, res: http.ServerResponse) => {
const handler = (await import('./server.js')).default; requestHandler(req, res, () => {
handler(req, res, () => {
res.statusCode = 404; res.statusCode = 404;
res.end('Not Found'); res.end('Not Found');
}); });