2014-10-03 37 views
0

試圖在這裏快速通道。我正在使用快速會話模塊,並且在使用對象或字符串的會話變量時沒有任何問題。但是,我似乎無法讓數組工作。我使用購物車技術作爲實驗室老鼠。下面是這是造成我的問題代碼:難以實現快速會話變量作爲數組

router.post('/', function(req, res) { 
    if (req.body.action == 'Add to Cart') { 
     var cart = req.session.cart = [];  
     cart.push(req.body.itemId); 
     res.redirect('/'); 
    } 
}); 

router.get('/', function(req, res) { 
     if (req.session.cart) { 
      var itemsInCart = req.session.cart.length; 
     } 
     res.render('index', { 
      title: 'Shopping Spree', 
      itemsInCart: itemsInCart, 
      products: [ 
       {id: 1, item: 'Boeing 747', price: 4500}, 
       {id: 2, item: 'Luxury Yacht', price: 200}, 
       {id: 3, item: 'Mercedes AMG GT', price: 15000}, 
       {id: 4, item: 'Apple iPhone 6', price: 2400}, 
       {id: 5, item: 'Moet Hennessey', price: 5000} 
      ] 

     }); 
    }); 

並在視圖:index.jade

extends layout 
block content 
    h2= title 
    p Cart(#{itemsInCart} items) 
     a(href="/cart") [VIEW CART] 

    table 
     thead 
      tr 
       th Item 
       th Price 
      tr 
     tbody 
     - for (var i in products) { 
      tr 
       td= products[i].item 
       td= products[i].price 
       td 
        form(action="/", method="post") 
         input(type="hidden", name="itemId" value="#{products[i].id}") 
         input(type="submit", name="action", value="Add to Cart") 
     - } 

第一次「添加到購物車」按鈕後,itemsInCart確實更新爲1的後續「添加到購物車」點擊次數不會更新該值。

請指教。

回答

2

使用此行

var cart = req.session.cart = []; 

每次調用時,你重新定義爲[] req.session.cart的內容。

嘗試,而不是:

var cart = req.session.cart || []; 

它將使現有的cart價值會讓你以前不鬆動的項目

UPDATE

至於更新的問題,這裏是你可以做什麼,以保持Jade的綁定更新:

var pageScope; 

router.post('/', function (req, res) { 
    if (req.body.action == 'Add to Cart') { 
     var cart = req.session.cart = []; 
     cart.push(req.body.itemId); 
     pageScope.itemsInCart = req.session.cart && req.session.cart; 
     res.redirect('/'); 
    } 
}); 

router.get('/', function (req, res) { 
    pageScope.itemsInCart = req.session.cart && req.session.cart; 
    res.render('index', pageScope = { 
     //... 
    }); 
}); 

想法是更新itemsInCart,每次增加cart數組的長度。

+0

這似乎沒有工作。我試過了,itemsInCart保持在0,不會更新。 – Duos 2014-10-03 12:39:23

+0

這意味着負責更新的代碼片段不會在項目添加後運行,請提供有關此ItemsInCart變量定義位置的更多信息? – jevgenig 2014-10-03 12:41:21

+0

我編輯了我的問題,添加了所有相關的代碼。請檢查一下。 – Duos 2014-10-03 12:54:35

0

好了,很多很多的反覆之後,我終於得到它的工作:

router.get('/', function(req, res) { 
    if (req.session.cart) { 
     var itemsInCart = req.session.cart.length; 
    } else { 
     req.session.cart = []; 
    } 
    res.render('index', { 
     title: 'Shopping Spree', 
     itemsInCart: itemsInCart, 
     //... 
    }); 
}); 

然後

router.post('/', function(req, res) { 
    if (req.body.action == 'Add to Cart') { 
     req.session.cart.push(req.body.itemId); 
     res.redirect('/'); 
    } 
}); 

我只是不知道爲什麼我沒有想到這點。必須是我糟糕的日子之一。