2013-11-02 46 views
0

我使用快遞3.x並嘗試創建cookie。快遞,使用json創建cookie

我試圖以下JSON:

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

其中product是:

{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; 

我不能讓「風格[產品]'工作。我的問題是什麼?

我需要創建一個json,看起來像 'req.cookies.cart.styles [產品]' 這

請幫助!

回答

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。使用類似的方法來測試算法的其他部分。

2

您只能在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()) 

您可以檢查瀏覽器,你可以看到餅乾如下

cart:[object Object] 

所以更好的主意是,你必須使用JSON.stringify/JSON.parse如下

Set Cookie:

res.cookie('cart',JSON。字符串化({ 款式:款式[產品], 數:0, 總:0 }))

獲取餅乾

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

注:但是你可以通過使用存儲的cookie JSON.stringify,存儲這樣的購物車信息是不可取的。你必須更喜歡會話存儲而不是cookie。

+0

謝謝你的回答。我不知道cookie只存儲一個字符串。我嘗試了會話,但它吃了太多的回憶,以至於Chrome在購物車和Internet Explorer中存儲了8種樣式存儲了10種樣式..所以我正在探索替代 – wisleans

+1

@wisleans,您可以將會話存儲在memcache或數據庫中。當您使用負載平衡運行節點應用程序時,這是非常樂觀的解決方案。 connect-memcached,connect-mongo,session-mongoose模塊等等。你可以嘗試任何這些。 –

+0

你喜歡哪個模塊? connect-memcached似乎非常複雜..連接mongo給我一個錯誤,說套接字掛斷。 – wisleans