【问题标题】:How to get Expess object cookie in angularJS?如何在 angularJS 中获取 Expess 对象 cookie?
【发布时间】:2017-01-09 20:23:53
【问题描述】:

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:”)吗?

【问题讨论】:

    标签: javascript angularjs express cookies


    【解决方案1】:

    您可以手动制作 JSON 字符串:

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

    ./express/lib/response.js 中添加的前缀 j:(第 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

    【讨论】:

    • 为什么我没想到...这么明显! :) 谢谢。我现在不接受你的回答,以防有人知道为什么要使用这种表示法......
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多