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

时间:2016-01-29 13:23:45

标签: javascript angularjs express cookies

Express documentation说我们可以使用此函数设置一个包含对象的cookie:

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

我想使用Angular ngCookie检索此值:

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

但它引发了一个错误:

SyntaxError: Unexpected token j

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

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

我知道我可以删除字符然后解析对象,但我更倾向于使用更通用的方法。

我可以强制Express不使用这种语法设置cookie(没有" j:")?

1 个答案:

答案 0 :(得分:2)

您可以手动制作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