标签: angular-transfer-state

TransferState:谁保证数据已经存储在状态中?

我正在使用TransferState进行SSR,并想知道当我们这样做时谁保证

http.get(...).subscribe(data => {
  transferState.set(DATA_KEY, data)
})
Run Code Online (Sandbox Code Playgroud)

数据将存储在transferState中?因为http.get是异步操作,并且可以生成内容并将其提供给没有此数据的客户端.

angular-universal angular angular-transfer-state

8
推荐指数
1
解决办法
289
查看次数

以角度通用的方式将令牌发送到服务器

我有一个 Angular 6+ 应用程序,它被配置为使用Angular Universal来利用服务器端渲染。
我还使用TransferState来避免服务器和客户端应用程序上的重复 API 调用。

我的 angular 应用程序中的身份验证基于令牌。

问题出在用户第一次打开我的 Web 应用程序时,这导致为未经身份验证的用户呈现 index.html,而用户实际上已登录,但没有机会将令牌传输到服务器。因此,当客户端应用程序与服务器应用程序交换时,由于浏览器的localStorage/sessionStorage 中存在令牌,因此需要再次调用API。

我使用 node.js 和 express.js 来实现服务端渲染。

我认为解决方案是使用会话和 cookie。这需要我做很多工作,因为我不熟悉 node.js 来处理会话/cookie。有什么快速简便的解决方案吗?

node.js angular-universal angular angular-transfer-state

7
推荐指数
1
解决办法
3534
查看次数

使用相对 URL 时如何使用 HTTP 传输状态

我正在尝试实现内置的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 });
    ...
Run Code Online (Sandbox Code Playgroud)

它启用客户端的相对 URL …

angular-universal angular angular-transfer-state

3
推荐指数
1
解决办法
1486
查看次数