【发布时间】:2017-12-26 07:00:56
【问题描述】:
我有一个带有服务器端渲染的 Angular 4 应用程序。在服务器端我有这样的代码:
const res: express.Response = this.injector.get('RESPONSE');
res.cookie('Name', 'Value');
那么,如何在组件中访问这些 cookie? 我在组件中注入 Express RESPONSE,但没有 cookie。
@Component({
selector: 'app-my',
templateUrl: './my.component.html',
styleUrls: ['./my.component.scss']
})
export class MyComponent implements OnInit {
constructor(@Inject(PLATFORM_ID) private platformId: Object, private injector: Injector) {
}
ngOnInit() {
if (isPlatformServer(this.platformId)) {
let CircularJSON = require('circular-json');
let res: express.Response = this.injector.get('RESPONSE');
console.log("RESPONSE = " + CircularJSON.stringify(res));
}
}
}
问题是在服务器端获取 cookie,然后在浏览器中设置它们。
【问题讨论】:
-
您找到解决方案了吗?我还坚持将 cookie 从通用响应传递给客户端
-
@dionisis-k 我在 /src/app/shared/for-storage/ 中找到了这个 github.com/Angular-RU/angular-universal-starter 的解决方案。 brouser 和 server 有两种获取 cookie 的实现。在 app.module.ts 文件中,您应该像这样描述提供程序块:{provide: AppStorage, useClass: CookieStorage} 并在 app.server.module.ts 文件中这样描述:{provide: AppStorage, useClass: UniversalStorage} 然后在组件中,您想在构造函数中使用此存储的位置使用 @Inject(AppStorage) private appStorage: Storage.
-
哦,很棒的解决方案。顺便说一句,我也为您的示例找到了解决方案。确保提供 res
app.get('*', (req, res) => { res.render('index', {req, res}); });。res.cookie( name, value)有效。注意我使用注入令牌而不是注入器
标签: javascript angular express cookies