我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用 Angular 服务器端渲染 Transfer State Service

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用 Angular 服务器端渲染 Transfer State Service

假设我们使用 Angular Universal 开发一个服务器端渲染的 Angular 应用,这个应用会消费一个第三方的 Restful API.

上述场景分为下列六个步骤:

  • 用户向部署了 Angular 服务器端应用的 Node.js 服务器发起页面请求
  • Node.js 调用第三方 Restful API,
  • 第三方 Restful API 返回结果,这个结果被用于渲染最后的页面
  • 服务器端渲染的页面,返回给浏览器
  • Angular 在浏览器中引导,并再次调用 Restful API
  • Restful API 返回给浏览器,Angular 客户端应用重新将数据渲染到视图中。

我们可以通过创建 TransferState 服务来提高应用程序的效率,该服务是在 Node.js 服务器和浏览器中呈现的应用程序之间交换的一个键值注册表。

我们将通过一个 HTTP_INTERCEPTOR 机制来使用它,该机制将驻留在 HttpClient 服务中,并将操纵请求和响应。

创建一个新的 class,实现 HttpInterceptor 接口定义的 intercept 方法:

@Injectable({
 providedIn: 'root'
})
export class HttpInterceptorService implements HttpInterceptor
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>

每当对 HttpClient 服务执行任何 API 调用时,都会调用此方法。

为了简单起见,我们仅针对 GET 方法启用 TransferState:

if (request.method !== 'GET') {
     return next.handle(request);
   }

我们根据 GET 请求的 URL 生成一个密钥。 我们将使用键值对来存储或检索请求响应,具体取决于请求是在服务器端还是浏览器端处理:

const key: StateKey<string> = makeStateKey<string>(request.url);

为了区分服务器和浏览器运行环境,我们使用@angular/common库中的 isPlatformServer 方法以及 PLATFORM_ID 注入令牌:

 if (isPlatformServer(this.platformId)) {
       //serverSide
   } else {
       //browserSide
   }

当服务器端渲染时,我们将 API 结果写入 Transfer State 注册表中:

 if (isPlatformServer(this.platformId)) {
    return next.handle(request).pipe(tap((event) => {
      this.transferState.set(key, (<HttpResponse<any>> event).body);
    }));

在浏览器端代码中,我们要检查给定 HTTP 请求的响应是否已经驻留在 Transfer State 注册表中。 如果存在,我们直接从注册表中取出值,并清除注册表,以便将来的调用可以存储新数据,并将响应返回给调用者。

当且仅当注册表中不存在给定的键,我们才在客户端环境下执行 HTTP 调用。

  else {
    const storedResponse = this.transferState.get<any>(key, null);
    if (storedResponse) {
      const response = new HttpResponse({body: storedResponse, status: 200});
      this.transferState.remove(key);
      return of(response);
    } else {
      return next.handle(request);
    }
  }

到此这篇关于使用 Angular 服务器端渲染 Transfer State Service的文章就介绍到这了,更多相关 Angular Transfer State Service内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用 Angular 服务器端渲染 Transfer State Service

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用C++进行服务器端渲染?

使用c++++实现服务器端渲染(ssr)具有以下优点:更快的初始页面加载时间更好的搜索引擎优化 (seo)访问服务器端资源和功能在c++中,可以使用poco库进行服务器端渲染:安装poco创建服务器端渲染代码:创建一个包含渲染逻辑的requ
如何使用C++进行服务器端渲染?
2024-05-12

使用React怎么对服务端进行渲染

使用React怎么对服务端进行渲染?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。服务器端编写 React 组件如果是客户端渲染,浏览器首先会向浏览器发送请求,服
2023-06-06

使用node-canvas在服务端渲染echarts图表解析

这篇文章主要介绍了使用node-canvas在服务端渲染echarts图表解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

服务器端渲染技术架构:优化Web应用性能

随着Web应用的不断发展,用户对于性能和用户体验的要求越来越高。服务器端渲染(Server-Side Rendering,SSR)技术架构正是应对这一需求而出现的解决方案。

利用 Vue Nuxt.js 和服务器端渲染增强 Web 应用的 SEO

利用 Vue Nuxt.js 和服务器端渲染 (SSR) 优化 Web 应用的 SEO
利用 Vue Nuxt.js 和服务器端渲染增强 Web 应用的 SEO
2024-02-19

Vue Nuxt.js 中的服务器端渲染:使用案例、优点和最佳实践

服务器端渲染在 Vue Nuxt.js 中的应用:用例、优势和最佳实践
Vue Nuxt.js 中的服务器端渲染:使用案例、优点和最佳实践
2024-02-19

服务器端渲染:使用 Vue Nuxt.js 打造无缝且引人入胜的用户体验

服务器端渲染(SSR)技术为 Vue.js 应用程序提供了无缝且引人入胜的用户体验。本文将探讨使用 Nuxt.js 框架实现 SSR 的好处,并提供一个分步指南来构建一个支持 SSR 的 Vue Nuxt.js 应用程序。
服务器端渲染:使用 Vue Nuxt.js 打造无缝且引人入胜的用户体验
2024-02-19

服务器端渲染与 Vue Nuxt.js:提升 Web 应用速度的结合

提升 Web 应用速度的良方:服务器端渲染与 Vue Nuxt.js
服务器端渲染与 Vue Nuxt.js:提升 Web 应用速度的结合
2024-02-19

编程热搜

目录