如何在angular 7服务器端渲染中处理cookie

时间:2018-11-20 19:20:22

标签: angular cookies serverside-rendering angular7 ssr

我最近在我的SEO的angular 7项目中实现了SSR。我一直在使用ngx-cookie-service。当我第一次使用SSR运行应用程序时,我注意到一个错误,当尝试渲染应用程序时,罪魁祸首是this.cookieService.check。在ngOnInit()中的其中一个组件中,它执行一个方法调用,该方法执行以下操作:

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

我暂时已删除了调用此逻辑的方法来使应用正常工作。

我该如何使用它?是否有更好的NPM Cookie包?

我看到了推荐ngx-utils / cookie的帖子。但是,它似乎不支持@nguniversal/express-enginegit pull that allows express-engine有一个拉取请求修复程序。用于ngx-utils / cookies

我愚蠢地浪费了时间来获取ngx-utils/cookies,应用拉动,以最新的角度升级package.json,但是由于时间不够,最终没有进行测试。在走这条路之前,我应该做更多的研究。

是否有适用于angular 7 SSR的软件包cookie?我现在在Angular 7.1上。

1 个答案:

答案 0 :(得分:2)

使用

@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') 
    }
  });
 }

希望这会有所帮助!! ...如果要使用window对象,则需要做同样的事情

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