mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-17 19:13:34 +08:00
fix(@angular/ssr): handle baseHref that start with ./
Updated function to support handling `baseHref` starting with './' path correctly.
This commit is contained in:
parent
1bc5d65bf0
commit
8c534da649
@ -421,12 +421,15 @@ export async function getRoutesFromAngularRouterConfig(
|
|||||||
const routesResults: RouteTreeNodeMetadata[] = [];
|
const routesResults: RouteTreeNodeMetadata[] = [];
|
||||||
const errors: string[] = [];
|
const errors: string[] = [];
|
||||||
|
|
||||||
const baseHref =
|
let baseHref =
|
||||||
injector.get(APP_BASE_HREF, null, { optional: true }) ??
|
injector.get(APP_BASE_HREF, null, { optional: true }) ??
|
||||||
injector.get(PlatformLocation).getBaseHrefFromDOM();
|
injector.get(PlatformLocation).getBaseHrefFromDOM();
|
||||||
|
|
||||||
const compiler = injector.get(Compiler);
|
if (baseHref.startsWith('./')) {
|
||||||
|
baseHref = baseHref.slice(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
const compiler = injector.get(Compiler);
|
||||||
const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true });
|
const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true });
|
||||||
let serverConfigRouteTree: RouteTree<ServerConfigRouteTreeAdditionalMetadata> | undefined;
|
let serverConfigRouteTree: RouteTree<ServerConfigRouteTreeAdditionalMetadata> | undefined;
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ describe('AngularAppEngine', () => {
|
|||||||
setAngularAppTestingManifest(
|
setAngularAppTestingManifest(
|
||||||
[{ path: 'home', component: HomeComponent }],
|
[{ path: 'home', component: HomeComponent }],
|
||||||
[{ path: '**', renderMode: RenderMode.Server }],
|
[{ path: '**', renderMode: RenderMode.Server }],
|
||||||
locale,
|
'/' + locale,
|
||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -355,4 +355,24 @@ describe('extractRoutesAndCreateRouteTree', () => {
|
|||||||
{ route: '/', renderMode: RenderMode.Server, status: 201 },
|
{ route: '/', renderMode: RenderMode.Server, status: 201 },
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it(`handles a baseHref starting with a "./" path`, async () => {
|
||||||
|
setAngularAppTestingManifest(
|
||||||
|
[{ path: 'home', component: DummyComponent }],
|
||||||
|
[{ path: '**', renderMode: RenderMode.Server }],
|
||||||
|
/** baseHref*/ './example',
|
||||||
|
);
|
||||||
|
|
||||||
|
const { routeTree, errors } = await extractRoutesAndCreateRouteTree(
|
||||||
|
url,
|
||||||
|
/** manifest */ undefined,
|
||||||
|
/** invokeGetPrerenderParams */ true,
|
||||||
|
/** includePrerenderFallbackRoutes */ true,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(errors).toHaveSize(0);
|
||||||
|
expect(routeTree.toObject()).toEqual([
|
||||||
|
{ route: '/example/home', renderMode: RenderMode.Server },
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -21,12 +21,12 @@ import { ServerRoute, provideServerRoutesConfig } from '../src/routes/route-conf
|
|||||||
*
|
*
|
||||||
* @param routes - An array of route definitions to be used by the Angular Router.
|
* @param routes - An array of route definitions to be used by the Angular Router.
|
||||||
* @param serverRoutes - An array of ServerRoute definitions to be used for server-side rendering.
|
* @param serverRoutes - An array of ServerRoute definitions to be used for server-side rendering.
|
||||||
* @param [baseHref=''] - An optional base href to be used in the HTML template.
|
* @param [baseHref='/'] - An optional base href to be used in the HTML template.
|
||||||
*/
|
*/
|
||||||
export function setAngularAppTestingManifest(
|
export function setAngularAppTestingManifest(
|
||||||
routes: Routes,
|
routes: Routes,
|
||||||
serverRoutes: ServerRoute[],
|
serverRoutes: ServerRoute[],
|
||||||
baseHref = '',
|
baseHref = '/',
|
||||||
additionalServerAssets: Record<string, ServerAsset> = {},
|
additionalServerAssets: Record<string, ServerAsset> = {},
|
||||||
): void {
|
): void {
|
||||||
setAngularAppManifest({
|
setAngularAppManifest({
|
||||||
@ -40,7 +40,7 @@ export function setAngularAppTestingManifest(
|
|||||||
text: async () => `<html>
|
text: async () => `<html>
|
||||||
<head>
|
<head>
|
||||||
<title>SSR page</title>
|
<title>SSR page</title>
|
||||||
<base href="/${baseHref}" />
|
<base href="${baseHref}" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<app-root></app-root>
|
<app-root></app-root>
|
||||||
@ -55,7 +55,7 @@ export function setAngularAppTestingManifest(
|
|||||||
`<html>
|
`<html>
|
||||||
<head>
|
<head>
|
||||||
<title>CSR page</title>
|
<title>CSR page</title>
|
||||||
<base href="/${baseHref}" />
|
<base href="${baseHref}" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<app-root></app-root>
|
<app-root></app-root>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user