Ответ 1
HttpClient
не должен создаваться вручную, и это не простой процесс, поскольку он имеет множество зависимостей. Угловой инжектор выполняет всю работу по инъекции зависимостей и должен использоваться для получения экземпляра.
Как показано в этом ответе, можно получить экземпляр Углового провайдера (HttpClient
), настроив модуль и загрузив его.
Для UserService
должен использоваться очень похожий подход. Вот упрощенный, но работоспособный пример:
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import {Injector, Injectable, NgModule } from '@angular/core'
import {HttpClient, HttpClientModule} from '@angular/common/http'
import {ServerModule, platformDynamicServer} from '@angular/platform-server';
@Injectable()
export class UserService {
constructor(protected httpClient: HttpClient) {
httpClient.get('https://google.com/').subscribe(console.log, console.error);
}
}
@NgModule({
imports: [ServerModule, HttpClientModule],
providers: [UserService]
})
export class AppModule {
ngDoBootstrap() {}
}
(async () => {
const platform = platformDynamicServer();
const appModule = await platform.bootstrapModule(AppModule);
const userService = appModule.injector.get(UserService);
})()
.catch(console.error);
Для этого требуется совместимая конфигурация TypeScript, например:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}