我正在使用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这个
请帮忙!
答案 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的内容。使用类似的方法来测试算法的其他部分。