Гнездо Js Angular Universal ReferenceError: sessionStorage не определено - PullRequest
0 голосов
/ 22 апреля 2020

Пожалуйста, помогите, у меня есть приложение, использующее angular универсальный (angular 8 и Nest Js). я пытаюсь получить доступ к хранилищу сеанса внутри компонента angular (onInit), но Nest Js дает мне следующее: ERROR ReferenceError: sessionStorage is not defined. Посмотрев на angular DI , я попытался сделать следующее:

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 и Nest Js).

1 Ответ

1 голос
/ 23 апреля 2020

Спасибо Дэвиду. Чтобы Nest Js не выполнялся 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 на стороне браузера.

...