Express文档说,我们可以使用此功能通过对象设置Cookie:
res.cookie('cart', { items: [1,2,3] });
我想使用Angular ngCookie检索此值:
var cart= $cookies.getObject('cart');
但是它抛出一个错误:
SyntaxError: Unexpected token j
我可以使用来检索Cookie的字符串值$cookie.get('cart'),实际上,它看起来像这样:
$cookie.get('cart')
j:{ "items": [1,2,3] }
我知道我可以删除字符然后解析对象,但是我宁愿有一个更通用的方法。
我可以强制Express不使用此语法设置cookie(不带“ j:”)吗?
您可以手动创建JSON字符串:
res.cookie('cart', JSON.stringify({ items: [1,2,3] }) );
j:在./express/lib/response.js(第787-789行)中添加了前缀:
j:
./express/lib/response.js
var val = typeof value === 'object' ? 'j:' + JSON.stringify(value) : String(value);
value你的对象在哪里{ items: [1,2,3] }
value
{ items: [1,2,3] }
它不是任何标准的一部分,因为cookie的RFC表示该值只能是字符串。理想情况下,如果我们遵循标准,则如果您的cookie不是字符串,我们将拒绝它。为了方便起见,Express.js允许您将非字符串设置为值,然后我们将对JSON.stringify值进行设置,并在aj前面添加:因此,当我们再次为您读取该值时,我们知道该值应为JSON.parsed 。
https://github.com/expressjs/express/issues/2815