试着在这里试图表达。我正在使用快速会话模块,当我使用对象或字符串的会话变量时,我没有遇到任何麻烦。但是,我似乎无法让数组工作。我正在使用购物车技术作为实验室老鼠。这是导致我出现问题的代码:
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.后续“添加到购物车”的点击次数不会更新该值。
请告知。
答案 0 :(得分:2)
使用此行
var cart = req.session.cart = [];
每次调用它时,都会将req.session.cart的内容重新定义为[]。
尝试改为:
var cart = req.session.cart || [];
它将保留cart
的现有值,您不会丢失以前的项目
<强>更新强>
至于更新的问题,这里是你可以做的,以保持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
数组的长度。
答案 1 :(得分: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('/');
}
});
我只是不知道为什么我之前没想过这个。一定是我糟糕的日子之一。