Как обрабатывать куки в Angular 7 серверной рендеринга - PullRequest
0 голосов
/ 20 ноября 2018

Я недавно внедрил SSR в свой угловой проект для SEO.Я использовал ngx-cookie-сервис.Я заметил ошибку, когда я впервые запустил приложение с SSR, виновником был this.cookieService.check при попытке рендеринга приложения.В одном из моих компонентов, которые есть в ngOnInit (), он выполняет вызов метода, который выполняет следующие действия:

const exists = this.cookieService.check('cookiename');
if (exists) {
  showSpoilerCookieValue = this.cookieService.get('cookiename');
}

Временно я удалил метод, который вызывает эту логику, чтобы приложение работало.

Как я могу заставить это работать?Есть ли лучший пакет NPM для файлов cookie?

Я видел сообщения, рекомендующие ngx-utils / cookies.Однако он не поддерживает @nguniversal/express-engine.Есть запрос на получение исправления, исправляющий это git pull, который позволяет экспресс-движку .для ngx-utils / cookies

Я тупо потратил время на получение ngx-utils / cookies , применяя pull, обновляя package.json до последней версии, но так и не получилчтобы проверить это, когда у меня не хватило времени.Я должен был провести дополнительные исследования, прежде чем идти по этому пути.

Существует ли пакетный файл cookie, который будет работать для угловых 7 SSR?я сейчас на углу 7.1.

1 Ответ

0 голосов
/ 21 ноября 2018

Использование

@ngx-utils/cookies

Вы должны проверить, находитесь ли вы в браузере или нет

import { isPlatformBrowser } from '@angular/common';
import { CookiesService } from '@ngx-utils/cookies';
constructor(
    private cookieService: CookiesService,
    @Inject(PLATFORM_ID) private platformId: Object
) {}

  isLoggedIn(): Promise<boolean> {
   return new Promise<any>((resolve, reject) => {
    if (isPlatformBrowser(this.platformId)) {
      // get the cookie here
      this.cookieService.get('token')
      resolve('something here') 
    }
  });
 }

Надеюсь, это поможет !!... то же самое, если вы хотите использовать объект окна, вам нужно будет сделать

...
if (isPlatformBrowser(this.platformId)) {
    window.scrollTop() // or whatever you do with window object   
}
...