在server.ts文件中添加路由,使网络爬虫能够访问动态生成的站点地图。示例代码如下:
import { Router } from '@angular/router';
import { SitemapService } from './app/services/sitemap.service';
// …
app.get('/sitemap.xml', (req, res) => {
res.header('Content-Type', 'application/xml');
const sitemap = sitemapService.getSitemap();
res.send(sitemap.toString());
});
// …
export function appInitializerFactory(router: Router, sitemapService: SitemapService) {
return () => {
return new Promise(resolve => {
router.resetConfig([
// ...other routes
{ path: 'sitemap.xml', component: null },
]);
sitemapService.generateSitemap();
resolve();
});
};
}
// in AppModule
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { Router } from '@angular/router';
import { SitemapService } from './services/sitemap.service';
// ...
@NgModule({
// ...
providers: [
SitemapService,
{
provide: APP_INITIALIZER,
useFactory: appInitializerFactory,
multi: true,
deps: [Router, SitemapService],
},
],
})
export class AppModule {}
在上面的示例代码中,我们将“/sitemap.xml”添加到路由中,并创建一个路由,该路由没有组件,但通过SitemapService生成并返回动态生成的站点地图。
appInitializerFactory函数是一个应用程序初始化器,它将在应用程序启动时运行。该函数将路由配置更改为包括我们刚刚添加的路由,并且生成动态站点地图。
最后,在AppModule中,我们将appInitializerFactory函数添加到APP_INITIALIZER数组中,以确保该函数在应用程序启动时运行。
通过这些步骤,网络爬虫将能够访问您的Angular应用程序中动态生成的站点地图。