一尘不染

如何在angularJS中获取Expess对象cookie?

angularjs

Express文档说,我们可以使用此功能通过对象设置Cookie:

res.cookie('cart', { items: [1,2,3] });

我想使用Angular
ngCookie
检索此值:

var cart= $cookies.getObject('cart');

但是它抛出一个错误:

SyntaxError: Unexpected token j

我可以使用来检索Cookie的字符串值$cookie.get('cart'),实际上,它看起来像这样:

j:{ "items": [1,2,3] }

我知道我可以删除字符然后解析对象,但是我宁愿有一个更通用的方法。

我可以强制Express不使用此语法设置cookie(不带“ j:”)吗?


阅读 217

收藏
2020-07-04

共1个答案

一尘不染

您可以手动创建JSON字符串:

res.cookie('cart', JSON.stringify({ items: [1,2,3] }) );

j:./express/lib/response.js(第787-789行)中添加了前缀:

var val = typeof value === 'object'
    ? 'j:' + JSON.stringify(value)
    : String(value);

value你的对象在哪里{ items: [1,2,3] }

它不是任何标准的一部分,因为cookie的RFC表示该值只能是字符串。理想情况下,如果我们遵循标准,则如果您的cookie不是字符串,我们将拒绝它。为了方便起见,Express.js允许您将非字符串设置为值,然后我们将对JSON.stringify值进行设置,并在aj前面添加:因此,当我们再次为您读取该值时,我们知道该值应为JSON.parsed

https://github.com/expressjs/express/issues/2815

2020-07-04