хорошо, так что благодаря @ xrobert35 я получил это решение, которое, кажется, отлично работает с ssr и моим проектом ASP.NET Core + Angular 5
в main.server.ts
Я отредактировал createServerRenderer()
для перехватаhtml
возвращается как строка и добавляет <link>
тег как текст сразу после <head>
, очевидно, NO AMP LINK DEFINED FOR CURRENT PAGE
для целей отладки, и вам следует избегать добавления всего тега в случае, если нет доступных страниц усилителя
let promise = renderPromise.then(html => {
let ampTag = `<link rel="amphtml" href="${ampHTMLPages[params.url] || 'NO AMP LINK DEFINED FOR CURRENT PAGE'}">`;
return { html: html.replace("<head>", `<head>${ampTag}`) };
});
Для тех, кому нужно добавить мой полный main.server.ts
ниже:
import { RoutePaths } from './app/shared/routePaths.constants';
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import { renderModule, renderModuleFactory } from '@angular/platform-server';
import { APP_BASE_HREF } from '@angular/common';
import { enableProdMode } from '@angular/core';
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
import { createServerRenderer } from 'aspnet-prerendering';
export { AppServerModule } from './app/app.server.module';
import { ORIGIN_URL } from './app/shared/baseurl.constants';
enableProdMode();
export default createServerRenderer(params => {
const { AppServerModule, AppServerModuleNgFactory, LAZY_MODULE_MAP } = (module as any).exports;
const options = {
document: params.data.originalHtml,
url: params.url,
extraProviders: [
provideModuleMap(LAZY_MODULE_MAP),
{ provide: APP_BASE_HREF, useValue: params.baseUrl },
{ provide: 'BASE_URL', useValue: params.origin + params.baseUrl },
{ provide: ORIGIN_URL, useValue: params.origin }
]
};
const ampHTMLPages = {
[RoutePaths.exampleRoute]: 'some/amp/page/example.html'
}
const renderPromise = AppServerModuleNgFactory
? /* AoT */ renderModuleFactory(AppServerModuleNgFactory, options)
: /* dev */ renderModule(AppServerModule, options);
let promise = renderPromise.then(html => {
//@see https://www.ampproject.org/docs/getting_started/create/prepare_for_discovery
let ampTag = `<link rel="amphtml" href="${ampHTMLPages[params.url] || 'NO AMP LINK DEFINED FOR CURRENT PAGE'}">`;
return { html: html.replace("<head>", `<head>${ampTag}`) };
});
promise.catch(response => { console.error(response) });
return promise;
});