Angular поддерживает Server-Side Rendering (SSR) через платформу Angular Universal, что позволяет рендерить приложения на сервере и отправлять готовый HTML клиенту. Это улучшает производительность, SEO и восприятие пользователем.
Для интеграции SSR используется пакет
@nguniversal/express-engine. Настройка производится через
Angular CLI:
ng add @nguniversal/express-engine
Команда автоматически создаёт:
app.server.module.ts)server.ts)angular.json)AppServerModule импортирует корневой модуль приложения и
модуль ServerModule:
import { NgModule } from '@angular/core';
import { ServerModule } from '@angular/platform-server';
import { AppModule } from './app.module';
import { AppComponent } from './app.component';
@NgModule({
imports: [
AppModule,
ServerModule
],
bootstrap: [AppComponent],
})
export class AppServerModule {}
Express сервер подключает Angular Universal через
ngExpressEngine:
import 'zone.js/node';
import { ngExpressEngine } from '@nguniversal/express-engine';
import { AppServerModule } from './src/main.server';
import * as express from 'express';
import { join } from 'path';
const app = express();
const distFolder = join(process.cwd(), 'dist/browser');
app.engine('html', ngExpressEngine({
bootstrap: AppServerModule,
}));
app.set('view engine', 'html');
app.set('views', distFolder);
app.get('*.*', express.static(distFolder));
app.get('*', (req, res) => {
res.render('index', { req });
});
app.listen(4000, () => {
console.log(`Server running on http://localhost:4000`);
});
window или
document, так как на сервере их нет. Для работы с DOM
применять сервис Renderer2 или условную проверку
isPlatformBrowser.Для сборки SSR выполняются две команды:
ng build --prod
ng run <project-name>:server:production
После этого Express сервер готов к обслуживанию приложений с предварительным рендерингом.