回答

1

一個好方法是使localStorage注射併爲其提供不同的實現。

一個抽象類,反映Storage API可以用作標記:

export abstract class LocalStorage { 
    readonly length: number; 
    abstract clear(): void; 
    abstract getItem(key: string): string | null; 
    abstract key(index: number): string | null; 
    abstract removeItem(key: string): void; 
    abstract setItem(key: string, data: string): void; 
    [key: string]: any; 
    [index: number]: string; 
} 

那麼對於瀏覽器應用程序模塊是

export function localStorageFactory() { 
    return localStorage; 
} 
... 
{ provide: LocalStorage, useFactory: localStorageFactory } 

而對於服務器應用程序模塊localStorage可以用一些手段予以取代,如用於存儲器內存儲的node-storage-shim

{ provide: LocalStorage, useClass: StorageShim } 

使用DI而不是全局持久存儲也使測試更容易。

+0

感謝estus,現在我只是用platformID創建一個工作,因爲我並沒有將大量數據存儲在一個令牌中。我也會嘗試這個解決方案。 –

+0

是的,提供商只是一個更乾淨的方式來做到這一點。當然,platformID可以在提供程序中使用,但這隻會導致在瀏覽器包中使用StorageShim,而您並不需要它。 – estus