问题
Express documentation says that we can set a cookie with an object using this function:
res.cookie('cart', { items: [1,2,3] });
I want to retrieve this value using Angular ngCookie:
var cart= $cookies.getObject('cart');
But it throw an error:
SyntaxError: Unexpected token j
I can retrieve the string value of the cookie using $cookie.get('cart'), and, indeed, it looks like this:
j:{ "items": [1,2,3] }
I know I can remove the characters and then parse the object, but I'd rather have a more generic method.
Can I force Express to not set the cookie with this syntax (without "j:")?
回答1:
You can make JSON-string manually:
res.cookie('cart', JSON.stringify({ items: [1,2,3] }) );
Prefix j: added in ./express/lib/response.js (lines 787-789):
var val = typeof value === 'object'
? 'j:' + JSON.stringify(value)
: String(value);
where value is your object { items: [1,2,3] }
It's not part of any standard, as the RFC for cookies says the value can only be a string. Ideally if we followed the standard, we would reject your cookie if it wasn't a string. As a convenience, Express.js allows you to set non-strings as the values, and we'll JSON.stringify the value, pre-pending a j: so we know the value should be JSON.parsed when we read it again for you.
https://github.com/expressjs/express/issues/2815
来源:https://stackoverflow.com/questions/35085674/how-to-get-expess-object-cookie-in-angularjs