表达,用json创建cookie

时间:2013-11-02 00:07:44

标签: javascript json node.js cookies express

我正在使用express 3.x并尝试创建一个cookie。

我正在尝试关注json:

res.cookie('cart', {
                styles: styles[product],
                count: 0,
                total: 0
            }) 

产品是:

{product: {
       "_id": style._id,
       "style": style.style,
       "a": style.a,
       "color": color,
       "price": style.price,
       "desc": style.desc,
       "img": style.img,
       "category": style.category,
       "quantity": 1
        }

}

var product = req.params.a + "_" + style.id;

我不能让'style [product]'工作。我的问题是什么?

我需要创建一个看起来像'req.cookies.cart.styles [product]'的json这个

请帮忙!

2 个答案:

答案 0 :(得分:4)

您只能在Cookie中存储字符串值。让我们假设你想在一个cookie中存储一个布尔值true,它被转换成一个字符串“true”并存储在浏览器cookie中。以下代码将执行相同的操作

res.cookie('myBoolean', true)

现在布尔值true存储为cookie中的字符串“true”。

在您的情况下,您尝试将对象存储在cookie中。所以在内部通过调用函数将对象转换为字符串,如下所示

var myObj = {name: 'myObj'}
myObj.toString()

在您的代码中,cookie包含值

res.cookie('cart', ({
                styles: styles[product],
                count: 0,
                total: 0
            }).toString())

您可以查看浏览器,您可以按以下方式查看cookie

cart:[object Object]

所以更好的想法是,你必须使用JSON.stringify / JSON.parse如下

设置Cookie:

res.cookie('cart',JSON.stringify({     款式:款式[产品],     数:0,     总数:0 }))

获取Cookie

var cookieData = JSON.parse(req.cookies.cart)

注意:但是你可以使用JSON.stringify存储cookie,不建议存储这样的购物车信息。您必须更喜欢会话存储而不是cookie。

答案 1 :(得分:0)

目前还不清楚你想要达到的目标。如果product确实是对象,则它几乎不能用作密钥 - 它将转换为[object Object]字符串,而styles[product]将等于styles['[object Object]']

如果styles[product]返回的产品类似于第二个代码块中的产品,则style.id可能应为style.product._id

我建议的最好方法是通过添加console.log来检查所有中间步骤。例如:

console.log('keys of styles:', Object.keys(styles));
console.log('product:', product);
res.cookie('cart', {
    styles: styles[product],
    count: 0,
    total: 0
})

这将显示确切添加到cookie的内容。使用类似的方法来测试算法的其他部分。