我有一个包含两个应用程序的 monorepo 应用程序,一个后端使用 Node 制作,另一个使用 Angular 制作。我正在尝试使用后端以 SSR 模式渲染 Angular 应用程序,到目前为止我是这样做的:
constructor(
@inject(TYPES.Logger) private readonly logger: Logger,
@inject(TYPES.Server) private readonly server: Server,
@inject(TYPES.Template) private readonly template: Template,
) {
const frontendServerApplication = resolve(`${this.frontendServerFolder}/main.js`);
import(frontendServerApplication).then((mainModule) => {
this.AppServerModule = mainModule.default.AppServerModule;
this.renderModule = mainModule.default.renderModule;
this.ɵSERVER_CONTEXT = mainModule.default.ɵSERVER_CONTEXT;
});
}
// This is the rendered html
const html = await this.renderModule(this.AppServerModule, {
document: result,
url: ctx.request.url,
extraProviders: this.getExtraProviders(ctx, result),
});
return html
我最近升级到了 Angular 17,我想使用 CommonEngine 进行渲染:
const html = await commonEngine.render({
bootstrap: this.AppServerModule,
document: result,
url: ctx.request.url,
providers: this.getExtraProviders(ctx, result),
});
return html;
但是当我加载应用程序时,出现以下错误:
RuntimeError: NG0402: A required Injectable was not found in the dependency injection tree. If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.
at Object.useFactory (file:///home/marc/Desarrollo/packages/core/src/change_detection/scheduling/ng_zone_scheduling.ts:64:17)
at Object.factory (file:///home/marc/Desarrollo/packages/core/src/di/r3_injector.ts:550:32)
at file:///home/marc/Desarrollo/packages/core/src/di/r3_injector.ts:436:35
at runInInjectorProfilerContext (file:///home/marc/Desarrollo/packages/core/src/render3/debug/injector_profiler.ts:279:5)
at R3Injector.hydrate (file:///home/marc/Desarrollo/packages/core/src/di/r3_injector.ts:435:11)
at R3Injector.get (file:///home/marc/Desarrollo/packages/core/src/di/r3_injector.ts:291:23)
at injectInjectorOnly (file:///home/marc/Desarrollo/packages/core/src/di/injector_compatibility.ts:71:26)
at ɵɵinject (file:///home/marc/Desarrollo/packages/core/src/di/injector_compatibility.ts:95:58)
at injectArgs (file:///home/marc/Desarrollo/packages/core/src/di/injector_compatibility.ts:307:17)
at Object.multiRecord.factory (file:///home/marc/Desarrollo/packages/core/src/di/r3_injector.ts:410:37) {
code: 402
我是不是错过了什么?谢谢
在构造函数上使用时,需要使用
Inject()
,而不是inject
,在构造函数外部使用时,可以使用inject
。
...
constructor(
@Inject(TYPES.Logger) private readonly logger: Logger, // <- changed here
@Inject(TYPES.Server) private readonly server: Server, // <- changed here
@Inject(TYPES.Template) private readonly template: Template, // <- changed here
) {
...