欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用?Angular?服務器端渲染?Transfer?State?Service

 更新時間:2022年06月27日 09:41:57   作者:??JerryWang_sap????  
這篇文章主要介紹了使用?Angular?服務器端渲染?Transfer?State?Service,假設我們使用?Angular?Universal?開發(fā)一個服務器端渲染的?Angular?應用,這個應用會消費一個第三方的?Restful?API

假設我們使用 Angular Universal 開發(fā)一個服務器端渲染的 Angular 應用,這個應用會消費一個第三方的 Restful API.

上述場景分為下列六個步驟:

  • 用戶向部署了 Angular 服務器端應用的 Node.js 服務器發(fā)起頁面請求
  • Node.js 調(diào)用第三方 Restful API,
  • 第三方 Restful API 返回結果,這個結果被用于渲染最后的頁面
  • 服務器端渲染的頁面,返回給瀏覽器
  • Angular 在瀏覽器中引導,并再次調(diào)用 Restful API
  • Restful API 返回給瀏覽器,Angular 客戶端應用重新將數(shù)據(jù)渲染到視圖中。

我們可以通過創(chuàng)建 TransferState 服務來提高應用程序的效率,該服務是在 Node.js 服務器和瀏覽器中呈現(xiàn)的應用程序之間交換的一個鍵值注冊表。

我們將通過一個 HTTP_INTERCEPTOR 機制來使用它,該機制將駐留在 HttpClient 服務中,并將操縱請求和響應。

創(chuàng)建一個新的 class,實現(xiàn) HttpInterceptor 接口定義的 intercept 方法:

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

每當對 HttpClient 服務執(zhí)行任何 API 調(diào)用時,都會調(diào)用此方法。

為了簡單起見,我們僅針對 GET 方法啟用 TransferState:

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

我們根據(jù) GET 請求的 URL 生成一個密鑰。 我們將使用鍵值對來存儲或檢索請求響應,具體取決于請求是在服務器端還是瀏覽器端處理:

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

為了區(qū)分服務器和瀏覽器運行環(huán)境,我們使用@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 請求的響應是否已經(jīng)駐留在 Transfer State 注冊表中。 如果存在,我們直接從注冊表中取出值,并清除注冊表,以便將來的調(diào)用可以存儲新數(shù)據(jù),并將響應返回給調(diào)用者。

當且僅當注冊表中不存在給定的鍵,我們才在客戶端環(huán)境下執(zhí)行 HTTP 調(diào)用。

  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內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 獲取數(shù)組中最大最小值方法js代碼(自寫)

    獲取數(shù)組中最大最小值方法js代碼(自寫)

    經(jīng)搜索獲取數(shù)組中最大最小值的方法實在是太多了,不過大同小異,本文自寫了一個,有需要的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • ionic實現(xiàn)底部分享功能

    ionic實現(xiàn)底部分享功能

    這篇文章主要為大家詳細介紹了ionic實現(xiàn)底部分享功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 微信小程序?qū)崿F(xiàn)走馬燈效果實例

    微信小程序?qū)崿F(xiàn)走馬燈效果實例

    這篇文章主要給大家介紹了關于微信小程序?qū)崿F(xiàn)走馬燈效果的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • js實現(xiàn)指定時間倒計時效果

    js實現(xiàn)指定時間倒計時效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)指定時間倒計時效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • JS判斷元素是否存在數(shù)組中的5種方式總結

    JS判斷元素是否存在數(shù)組中的5種方式總結

    數(shù)組是我們編程中經(jīng)常使用的的數(shù)據(jù)結構之一,在處理數(shù)組時我們經(jīng)常需要在數(shù)組中查找特定的值,下面這篇文章主要給大家總結介紹了關于JS判斷元素是否存在數(shù)組中的5種方式,需要的朋友可以參考下
    2023-03-03
  • JavaScript實現(xiàn)的多個圖片廣告交替顯示效果代碼

    JavaScript實現(xiàn)的多個圖片廣告交替顯示效果代碼

    這篇文章主要介紹了JavaScript實現(xiàn)的多個圖片廣告交替顯示效果代碼,涉及javascript數(shù)組遍歷及頁面元素動態(tài)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 微信小程序使用wxParse解析html的方法教程

    微信小程序使用wxParse解析html的方法教程

    這篇文章主要給大家介紹了關于微信小程序使用wxParse解析html的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • js實現(xiàn)頁面跳轉(zhuǎn)的幾種方法小結

    js實現(xiàn)頁面跳轉(zhuǎn)的幾種方法小結

    下面小編就為大家?guī)硪黄猨s實現(xiàn)頁面跳轉(zhuǎn)的幾種方法小結。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript中操作Mysql數(shù)據(jù)庫實例

    JavaScript中操作Mysql數(shù)據(jù)庫實例

    這篇文章主要介紹了JavaScript中操作Mysql數(shù)據(jù)庫實例,本文直接給出實現(xiàn)代碼,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-04-04
  • bootstrap實現(xiàn)的自適應頁面簡單應用示例

    bootstrap實現(xiàn)的自適應頁面簡單應用示例

    這篇文章主要介紹了bootstrap實現(xiàn)的自適應頁面簡單應用,結合具體實例形式分析了基于bootstrap的列表布局結構頁面實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-03-03

最新評論