При рендеринге на стороне сервера для любых HTTP-вызовов требуется абсолютный URL-адрес.
Вы можете либо
- Использовать абсолютные URL-адреса для HTTP-запросов
- Вставитьисходный URL и префикс к базовому URL на стороне сервера
В ответах на вопрос на этот вопрос можно указать несколько вариантов: 2 .
Я бы лично предложил настроить токен инъекции, который дает вам источник сервера, и добавить его к базовому URL-адресу, используя перехватчики HTTP:
Добавить класс перехватчика HTTP:
import { Injectable, Inject, Optional } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
@Injectable()
export class UniversalInterceptor implements HttpInterceptor {
constructor(@Optional() @Inject('serverUrl') protected serverUrl: string) {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
const serverReq = !this.serverUrl ? req : req.clone({
url: `${this.serverUrl}${req.url}`
});
return next.handle(serverReq);
}
}
Добавить его вмассив провайдеров серверного модуля:
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: UniversalInterceptor,
multi: true
}
В конфигурации на стороне сервера (в этом примере выражается) укажите токен с URL-адресом источника сервера:
let protocol = 'http';
if (process.env.NODE_ENV == 'production') {
protocol = 'https'
}
app.engine('html', (_, options, callback) => {
let engine = ngExpressEngine({
bootstrap: AppServerModuleNgFactory,
providers: [
provideModuleMap(LAZY_MODULE_MAP),
{
provide: 'serverUrl',
useValue: `${protocol}://${options.req.get('host')}`
}
]
});
engine(_, options, callback)
})