Angular 17 SSR Express 服务器提供商

问题描述 投票:0回答:3

我尝试通过在“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);
  }

无论我尝试什么,我的响应始终为空。

我用谷歌搜索并阅读了官方文档。

我期待令牌返回一个值!

angular typescript server-side-rendering angular-providers
3个回答
1
投票

禁用预渲染并完美运行


0
投票

这是一个已知问题。 ATM devServer 不依赖于

server.ts
配置。


0
投票

我有同样的问题,我用 ng watch 运行节点服务器来测试这个,但是express的提供者没有传递给Angular,你找到一些方法来解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.