angular - 如何在 Angular 7 服务器端渲染中处理 cookie
问题描述
我最近在我的 Angular 7 SEO 项目中实施了 SSR。我一直在使用 ngx-cookie-service。当我第一次使用 SSR 运行应用程序时,我注意到一个错误,罪魁祸首是 this.cookieService.check 在尝试呈现应用程序时。在我在 ngOnInit() 中的一个组件中,它执行一个方法调用,该方法执行以下操作:
const exists = this.cookieService.check('cookiename');
if (exists) {
showSpoilerCookieValue = this.cookieService.get('cookiename');
}
我暂时删除了调用此逻辑以使应用程序正常工作的方法。
我怎样才能让它工作?有没有更好的用于 cookie 的 NPM 包?
我看到推荐 ngx-utils/cookies 的帖子。但是它似乎不支持@nguniversal/express-engine
. 有一个拉取请求修复了这个允许 express-engine 的 git pull。对于 ngx-utils/cookies
我愚蠢地浪费了时间来获取ngx-utils/cookies,应用拉取,用最新的角度升级 package.json ,但由于我没有时间而最终没有去测试它。在走这条路之前,我应该做更多的研究。
是否有适用于 Angular 7 SSR 的包 cookie?我现在在 Angular 7.1 上。
解决方案
使用
@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
}
推荐阅读
- c# - 如何更改插入符号格式
- excel - 使用 VBA 到 AutoCAD 代码的运行时错误 424
- angular - `ngOnChanges` 需要澄清才能理解
- javascript - 递归地用数组中的值填充对象
- dhtmlx-scheduler - DHTMLX 调度程序。我可以从 LightBox Checkbox 获取文本到 EventBox 吗?
- javascript - 为什么默认是:() => [],而不仅仅是 []?
- java - com.google.cloud.storage.StorageException 404 in blob.getContent()
- charts - 如何从chartjs中的所需点制作虚线?
- windows - 有没有办法停止或中断 Windows 关机过程
- extjs - 标签对于 radiogroup 单选按钮来说太大了