我尝试通过在“server.ts”文件中定义提供程序来将我的请求和响应对象共享给角度应用程序。
无论如何,通过将它们注入到 app.component 中,无论我是在服务器还是客户端上下文中,它们总是未定义的。
有人知道如何解决这个问题吗?遗憾的是,关于它的信息并不多。
我没有在开发模式下运行该应用程序,因为 Angular 目前在开发模式下忽略了 server.ts! - 我建造了它并为快递服务器提供服务。
我的代币看起来像这样:
export const REQUEST = new InjectionToken<Request>('REQUEST');
export const RESPONSE = new InjectionToken<Response>('RESPONSE');
我的服务器看起来像这样:
// All regular routes use the Angular engine
server.get('*', (req, res, next) => {
console.log('HI HI HI hi');
const { protocol, originalUrl, baseUrl, headers } = req;
/*const transferState = inject(TransferState);
transferState.set(makeStateKey<any>('t'), JSON.stringify('hi'));*/
commonEngine
.render({
bootstrap,
documentFilePath: indexHtml,
url: `${protocol}://${headers.host}${originalUrl}`,
publicPath: browserDistFolder,
providers: [
{ provide: RESPONSE, useValue: res },
{ provide: REQUEST, useValue: req }
],
})
.then((html) => res.send(html))
.catch((err) => next(err));
});
我的客户端注入响应对象
constructor(@Optional() @Inject(RESPONSE) private response: Response) {
super();
}
ngOnClientInit() {
console.log('RESPONSE', this.response);
console.log('I am on client', this.communicationService.getValue('data'), this.token);
}
无论我尝试什么,我的响应始终为空。
我用谷歌搜索并阅读了官方文档。
我期待令牌返回一个值!
禁用预渲染并完美运行
这是一个已知问题。 ATM devServer 不依赖于
server.ts
配置。
我有同样的问题,我用 ng watch 运行节点服务器来测试这个,但是express的提供者没有传递给Angular,你找到一些方法来解决这个问题吗?