NestJs Angular Universal ReferenceError: sessionStorage is not defined.

问题描述 投票:0回答:1

请帮助我,我有一个使用angular universal(angular 8和NestJs)的应用程序,我试图在一个angular component()中访问会话存储。onInit)但NestJs给我的是以下内容。ERROR ReferenceError: sessionStorage is not defined. 在看了 棱角分明 然后我尝试了以下内容。

export const BROWSER_STORAGE  = new InjectionToken<Storage>('Browser Storage', {
  providedIn: 'root',
  factory: () => window.sessionStorage
});

然后在我的组件中。

 constructor(@Inject(BROWSER_STORAGE) public storage: Storage) {}
  ngOnInit(): void {
     this.storage.setItem('store', 'store');
  }

现在得到以下错误 ERROR TypeError: this.storage.setItem is not a function. 如何使用angular universal(angular 8和NestJs)获取会话存储数据。

angular nestjs angular-universal
1个回答
1
投票

谢谢David。要使NestJs不执行 this.storage.setItem('store', 'store'); 不得不注射 PLATFORM_ID 并使用 isPlatformBrowser 如下所示。

  constructor(
    @Inject(BROWSER_STORAGE) public storage: Storage,
    @Inject(PLATFORM_ID) public platformId: object
  ) {}

然后在ngInit.里面将返回

  ngOnInit(): void {
    if (isPlatformBrowser(this.platformId)) {
      sessionStorage.setItem('store', 'store');
      this.storage.setItem('storeDI', 'storeDI');
    }
  }

isPlatformBrowser(this.platformId) 将返回 false 在服务器端和 true 在浏览器端。

© www.soinside.com 2019 - 2024. All rights reserved.