Skip to content

Commit 2f4cf38

Browse files
fix(build): ensure external SSR middleware handles requests outside baseHref
Move the `ExternalSsrMiddleware` registration to execute before Vite's internal middlewares. This fixes an issue where custom server routes (like `/health` or `/api`) were unreachable in development mode if the application used a specific `baseHref`, as Vite would filter them out before the SSR middleware could process them. Closes #31896
1 parent 32da5a8 commit 2f4cf38

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

packages/angular/build/src/tools/vite/plugins/setup-middlewares-plugin.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,21 @@ export function createAngularSetupMiddlewaresPlugin(
105105

106106
extensionMiddleware?.forEach((middleware) => server.middlewares.use(middleware));
107107

108+
// For ExternalSsrMiddleware, install the middleware early to ensure custom middleware
109+
// in server.ts can handle requests outside the base path (e.g., /ping when baseHref=/custom/)
110+
// This allows fallthrough for custom routes that don't start with the configured baseHref
111+
if (ssrMode === ServerSsrMode.ExternalSsrMiddleware) {
112+
server.middlewares.use(
113+
await createAngularSsrExternalMiddleware(server, indexHtmlTransformer),
114+
);
115+
}
116+
108117
// Returning a function, installs middleware after the main transform middleware but
109118
// before the built-in HTML middleware
110119
// eslint-disable-next-line @typescript-eslint/no-misused-promises
111120
return async () => {
121+
// ExternalSsrMiddleware was already installed above, skip here
112122
if (ssrMode === ServerSsrMode.ExternalSsrMiddleware) {
113-
server.middlewares.use(
114-
await createAngularSsrExternalMiddleware(server, indexHtmlTransformer),
115-
);
116-
117123
return;
118124
}
119125

0 commit comments

Comments
 (0)