我正在使用TransferState进行SSR,并想知道当我们这样做时谁保证
http.get(...).subscribe(data => {
  transferState.set(DATA_KEY, data)
})
数据将存储在transferState中?因为http.get是异步操作,并且可以生成内容并将其提供给没有此数据的客户端.
我有一个 Angular 6+ 应用程序,它被配置为使用Angular Universal来利用服务器端渲染。
我还使用TransferState来避免服务器和客户端应用程序上的重复 API 调用。
我的 angular 应用程序中的身份验证基于令牌。
问题出在用户第一次打开我的 Web 应用程序时,这导致为未经身份验证的用户呈现 index.html,而用户实际上已登录,但没有机会将令牌传输到服务器。因此,当客户端应用程序与服务器应用程序交换时,由于浏览器的localStorage/sessionStorage 中存在令牌,因此需要再次调用API。
我使用 node.js 和 express.js 来实现服务端渲染。
我认为解决方案是使用会话和 cookie。这需要我做很多工作,因为我不熟悉 node.js 来处理会话/cookie。有什么快速简便的解决方案吗?
我正在尝试实现内置的TransferHttpCacheModule以消除重复请求。我在我的应用程序中使用这个拦截器:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const authService = this.injector.get(AuthenticationService);
    const url = `${this.request ? this.request.protocol + '://' + this.request.get('host') : ''}${environment.baseBackendUrl}${req.url}`
    let headers = new HttpHeaders();
    if (this.request) {
      // Server side: forward the cookies
      const cookies = this.request.cookies;
      const cookiesArray = [];
      for (const name in cookies) {
        if (cookies.hasOwnProperty(name)) {
          cookiesArray.push(`${name}=${cookies[name]}`);
        }
      }
      headers = headers.append('Cookie', cookiesArray.join('; '));
    }
    headers = headers.append('Content-Type', 'application/json');
    const finalReq: HttpRequest<any> = req.clone({ url, headers });
    ...
它启用客户端的相对 URL …