Skip to content

Commit a74d324

Browse files
committed
refactor(@angular/ssr): replace logic to determine the original URL
Using `currentNavigation` might not work in all cases as this will be null when the navigate has already completed.
1 parent 58dcfd1 commit a74d324

File tree

1 file changed

+13
-15
lines changed
  • packages/angular/ssr/src/utils

1 file changed

+13
-15
lines changed

packages/angular/ssr/src/utils/ng.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@ export async function renderAngular(
6060
serverContext: string,
6161
): Promise<{ hasNavigationError: boolean; redirectTo?: string; content: () => Promise<string> }> {
6262
// A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.
63-
const urlToRender = stripIndexHtmlFromURL(url).toString();
63+
const urlToRender = stripIndexHtmlFromURL(url);
6464
const platformRef = platformServer([
6565
{
6666
provide: INITIAL_CONFIG,
6767
useValue: {
68-
url: urlToRender,
68+
url: urlToRender.toString(),
6969
document: html,
7070
},
7171
},
@@ -96,31 +96,29 @@ export async function renderAngular(
9696
applicationRef = await bootstrap({ platformRef });
9797
}
9898

99-
const envInjector = applicationRef.injector;
100-
const router = envInjector.get(Router);
101-
const initialUrl = router.currentNavigation()?.initialUrl.toString();
102-
10399
// Block until application is stable.
104100
await applicationRef.whenStable();
105101

106102
// TODO(alanagius): Find a way to avoid rendering here especially for redirects as any output will be discarded.
103+
const envInjector = applicationRef.injector;
107104
const routerIsProvided = !!envInjector.get(ActivatedRoute, null);
105+
const router = envInjector.get(Router);
108106
const lastSuccessfulNavigation = router.lastSuccessfulNavigation();
109107

110108
if (!routerIsProvided) {
111109
hasNavigationError = false;
112-
} else if (lastSuccessfulNavigation?.finalUrl && initialUrl !== null) {
110+
} else if (lastSuccessfulNavigation?.finalUrl) {
113111
hasNavigationError = false;
114112

115-
const { finalUrl } = lastSuccessfulNavigation;
116-
const finalUrlStringified = finalUrl.toString();
117-
118-
if (initialUrl !== finalUrlStringified) {
119-
const baseHref =
120-
envInjector.get(APP_BASE_HREF, null, { optional: true }) ??
121-
envInjector.get(PlatformLocation).getBaseHrefFromDOM();
113+
const baseHref =
114+
envInjector.get(APP_BASE_HREF, null, { optional: true }) ??
115+
envInjector.get(PlatformLocation).getBaseHrefFromDOM();
116+
const finalUrlStringified = lastSuccessfulNavigation.finalUrl.toString();
117+
const finalUrlWithBaseHref = joinUrlParts(baseHref, finalUrlStringified);
118+
const initialUrl = `${urlToRender.pathname}${urlToRender.search}${urlToRender.hash}`;
122119

123-
redirectTo = joinUrlParts(baseHref, finalUrlStringified);
120+
if (initialUrl !== finalUrlWithBaseHref) {
121+
redirectTo = finalUrlWithBaseHref;
124122
}
125123
}
126124

0 commit comments

Comments
 (0)