Session使变量更新数据两次

时间:2016-10-04 16:36:44

标签: angularjs node.js session

每次我获得新价格时,都应该发生以下情况: totalprice = totalprice + cart [i] 例如,如果 totalprice 以前为500且新价格为800,那么 totalprice 应为(500 + 800),而目前为500(800) + 500 + 800)。为什么会这样?

exports.add = function(req, res) {
    var cart = req.body.cart;
    console.log('frome node..adding checkcart.js');
    console.log("Session Initialized!!");
    for(var i = 0 ; i < cart.length ; i++) {
        totalprice = cart[i].price + totalprice;
        console.log('Current Price: '+cart[i].price);
    }
    req.session.cart = cart;
    console.log(cart);
    console.log('total: ' + totalprice);
    //req.session.totalprice = totalprice;
    json_responses = {
        "totalprice": req.session.totalprice
    }
    res.send(json_responses);
};

1 个答案:

答案 0 :(得分:0)

这是许多答案之一。我建议创建一个可以计算已添加项目数量的变量。否则,你的for循环会一次又一次地计算它们。请记住,你的问题缺少很多代码,所以这会让我添加两个选项。

选项1

每次用户添加项目时,都会调用添加功能。对于此选项,您只需将最后添加项添加到总价计算中。所以在你的代码中,而不是:

for(var i = 0 ; i < cart.length ; i++) {
    totalprice = cart[i].price + totalprice;
    console.log('Current Price: '+cart[i].price);
}

使用:

totalprice = cart[cart.length-1].price + totalprice;

选项2

此选项适用于用户可以添加多个项目的情况,并且一旦用户单击调用add方法的按钮,就会计算价格。这稍微有些棘手。您需要添加一个计数器,用于计算已计算的项目。所以在代码中:

var counter = 0;
exports.add = function(req, res) {
    var cart = req.body.cart;
    var prevCounter = counter;
    counter = req.body.cart.length - counter; // items added in the session
    console.log('frome node..adding checkcart.js');
    console.log("Session Initialized!!");
    for(var i = prevCounter ; i < counter ; i++) {
        totalprice = cart[i].price + totalprice;
        console.log('Current Price: ' + cart[i].price);
    }
    req.session.cart = cart;
    console.log(cart);
    console.log('total: ' + totalprice);
    //req.session.totalprice = totalprice;
    json_responses = {
        "totalprice": req.session.totalprice
    }
    res.send(json_responses);
};
祝你好运!