【问题标题】:Session makes the variable update data twiceSession使变量更新数据两次
【发布时间】:2016-10-05 03:10:39
【问题描述】:

每次我获得新价格时,都会发生以下情况: totalprice = totalprice + 购物车[i] 例如,如果 totalprice 以前是 500,而新价格是 800,则 totalprice 应该是 (500 + 800) 而当前是 (500 + 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);
};

【问题讨论】:

  • 添加控制台日志为例
  • frome node..adding checkcart.js [ { uid: 'lenvyga', product: 'Lenovo Yoga', price: 800 } ] 会话初始化!!当前价格:800 总计:800 POST /addtocart 200 117.127 ms - 2 frome node..adding checkcart.js [ { uid: 'lenvyga', product: 'Lenovo Yoga', price: 800 }, { uid: 'macbpr',产品:'MacBook Pro',价格:1200 } ] 会话初始化!!当前价格:800 当前价格:1200 总计:2800
  • 问题出在哪里?首先,总价格为 0,添加 800 后变为 800,如控制台日志中所述。然后再添加两个,(1) 800 和 (2) 1200。所以它需要总价格(当前为 800)并添加价格(1)和(2)。这使它成为 800+1200+800 应该是 2800。也就是说,正是你得到的(根据控制台日志)。
  • 问题是我将项目推入一个数组,因此我不是第二次推两个项目,而是只推一个。但它需要两者的值。
  • 嘿杰克,如果下面的答案解决了您的问题,请用绿色 V(复选标记)标记它,以通知其他阅读此问题的用户正确答案。如果没有,请告诉我原因。

标签: angularjs node.js session


【解决方案1】:

这是众多答案之一。我建议创建一个变量来计算已添加的项目数量。否则,您的 for 循环将一次又一次地计算它们。请记住,您的问题缺少很多代码,因此我将添加两个选项。

选项 1

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

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);
};

祝你好运!

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2013-01-09
    • 2015-05-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多