Skip to content

ng build re-runs server multiple times when multiple routes use RenderMode.Prerender in app.routes.server.ts #30202

Closed as not planned
@apappas1129

Description

@apappas1129

Command

build

Description

When defining multiple routes with RenderMode.Prerender in app.routes.server.ts, such as:

{
  path: 'shop/:product',
  renderMode: RenderMode.Prerender,
  async getPrerenderParams() {
    return [
      'ccd8-123f',
      'f3ad-e1u4',
      'cvae-5ase',
    ].map(product => ({ product }));
  },
  fallback: PrerenderFallback.Server,
},
{
  path: '**',
  renderMode: RenderMode.Prerender,
},

it appears that the server is started multiple times — once per route — during ng build. This leads to the following error if the isMainModule guard is removed from server.ts:

Error: listen EADDRINUSE: address already in use :::4000

In my case, I must remove the isMainModule check to support deployment via iisnode on Azure, but doing so causes this build issue.

Minimal Reproduction

Remove isMainModule check from` server.ts:

...
const port = process.env['PORT'] || 4000;
app.listen(port, () => {
  console.log(`Node Express server listening on http://localhost:${port}`);
});
export const reqHandler = createNodeRequestHandler(app);

Have multiple routes with renderMode: RenderMode.Prerender on app.routes.server.ts.

Exception or Error

`Error: listen EADDRINUSE: address already in use :::4000`

Your Environment

Angular CLI: 19.2.8
Node: 18.19.0
Package Manager: npm 10.8.1
OS: win32 x64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions