Skip to content

Commit 6224b05

Browse files
committed
fix(@angular/ssr): correctly set config URL
When calling `renderApplication` or `renderModule` the URL would be overridden to undefined as the `url` option was not provided as an option. (cherry picked from commit f6a088b)
1 parent 2afe760 commit 6224b05

File tree

4 files changed

+27
-28
lines changed

4 files changed

+27
-28
lines changed

packages/angular/ssr/src/common-engine.ts

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@
77
*/
88

99
import { ApplicationRef, StaticProvider, Type } from '@angular/core';
10-
import {
11-
INITIAL_CONFIG,
12-
renderApplication,
13-
renderModule,
14-
ɵSERVER_CONTEXT,
15-
} from '@angular/platform-server';
10+
import { renderApplication, renderModule, ɵSERVER_CONTEXT } from '@angular/platform-server';
1611
import * as fs from 'node:fs';
1712
import { dirname, resolve } from 'node:path';
1813
import { URL } from 'node:url';
@@ -151,6 +146,11 @@ export class CommonEngine {
151146
}
152147

153148
private async renderApplication(opts: CommonEngineRenderOptions): Promise<string> {
149+
const moduleOrFactory = this.options?.bootstrap ?? opts.bootstrap;
150+
if (!moduleOrFactory) {
151+
throw new Error('A module or bootstrap option must be provided.');
152+
}
153+
154154
const extraProviders: StaticProvider[] = [
155155
{ provide: ɵSERVER_CONTEXT, useValue: 'ssr' },
156156
...(opts.providers ?? []),
@@ -162,24 +162,17 @@ export class CommonEngine {
162162
document = await this.getDocument(opts.documentFilePath);
163163
}
164164

165-
if (document) {
166-
extraProviders.push({
167-
provide: INITIAL_CONFIG,
168-
useValue: {
169-
document,
170-
url: opts.url,
171-
},
172-
});
173-
}
174-
175-
const moduleOrFactory = this.options?.bootstrap ?? opts.bootstrap;
176-
if (!moduleOrFactory) {
177-
throw new Error('A module or bootstrap option must be provided.');
178-
}
165+
const commonRenderingOptions = {
166+
url: opts.url,
167+
document,
168+
};
179169

180170
return isBootstrapFn(moduleOrFactory)
181-
? renderApplication(moduleOrFactory, { platformProviders: extraProviders })
182-
: renderModule(moduleOrFactory, { extraProviders });
171+
? renderApplication(moduleOrFactory, {
172+
platformProviders: extraProviders,
173+
...commonRenderingOptions,
174+
})
175+
: renderModule(moduleOrFactory, { extraProviders, ...commonRenderingOptions });
183176
}
184177

185178
/** Retrieve the document from the cache or the filesystem */

packages/schematics/angular/migrations/update-17/replace-nguniversal-engines.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,15 @@ export function app(): express.Express {
137137
138138
// All regular routes use the Angular engine
139139
server.get('*', (req, res, next) => {
140+
const { protocol, originalUrl, baseUrl, headers } = req;
141+
140142
commonEngine
141143
.render({
142144
bootstrap,
143145
documentFilePath: indexHtml,
144-
url: req.originalUrl,
146+
url: \`\${protocol}://\${headers.host}\${originalUrl}\`,
145147
publicPath: distFolder,
146-
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }],
148+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
147149
})
148150
.then((html) => res.send(html))
149151
.catch((err) => next(err));

packages/schematics/angular/ssr/files/application-builder/server.ts.template

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ export function app(): express.Express {
2626

2727
// All regular routes use the Angular engine
2828
server.get('*', (req, res, next) => {
29+
const { protocol, originalUrl, baseUrl, headers } = req;
30+
2931
commonEngine
3032
.render({
3133
<% if (isStandalone) { %>bootstrap<% } else { %>bootstrap: AppServerModule<% } %>,
3234
documentFilePath: indexHtml,
33-
url: req.originalUrl,
35+
url: `${protocol}://${headers.host}${originalUrl}`,
3436
publicPath: browserDistFolder,
35-
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }],
37+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
3638
})
3739
.then((html) => res.send(html))
3840
.catch((err) => next(err));

packages/schematics/angular/ssr/files/server-builder/server.ts.template

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ export function app(): express.Express {
2929

3030
// All regular routes use the Angular engine
3131
server.get('*', (req, res, next) => {
32+
const { protocol, originalUrl, baseUrl, headers } = req;
33+
3234
commonEngine
3335
.render({
3436
<% if (isStandalone) { %>bootstrap<% } else { %>bootstrap: AppServerModule<% } %>,
3537
documentFilePath: indexHtml,
36-
url: req.originalUrl,
38+
url: `${protocol}://${headers.host}${originalUrl}`,
3739
publicPath: distFolder,
38-
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }],
40+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
3941
})
4042
.then((html) => res.send(html))
4143
.catch((err) => next(err));

0 commit comments

Comments
 (0)