gpt4 book ai didi

javascript - 数字没有加在一起 Node js

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:17 26 4
gpt4 key购买 nike

我正在尝试在 session 中存储产品的价格,如果产品被单击两次,则应该添加价格并在 session 中显示,但由于某种原因,当我尝试添加两个数字(例如 15 + 15)时,它会添加类似 01515 的内容,我不确定为什么会发生这种情况。

这是开始添加产品的 .hbs 文件。

{{# each products}}
<div class="row">
{{# each this}}
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="{{this.imagePath}}" alt="..." class="img-responsive">
<div class="caption">
<h3>{{this.title}}</h3>
<p>{{this.description}}</p>
<div class="clearfix">
<div class="price pull-left">${{this.price}}</div>
<a href="/add-to-cart/{{this._id}}" class="btn btn-sucess pull-right" role="button">Add to cart</a>
</div>
</div>
</div>
</div>
{{/each}}
</div>
{{/each}}

按下“添加到购物车”按钮后,这是路线和型号,

路线

router.get('/add-to-cart/:id', function(req, res, next) {
var productId = req.params.id;
var cart = new Cart(req.session.cart ? req.session.cart : {});

Product.findById(productId, function(err, product) {
if (err) {
return res.redirect('/');
}
cart.add(product, product.id);
req.session.cart = cart;
console.log(req.session.cart);
res.redirect('/');
});
});

型号

module.exports = function Cart(oldCart) {
this.items = oldCart.items || {};
this.totalQty = oldCart.totalQty || 0;
this.totalPrice = oldCart.totalPrice || 0;

this.add = function(item, id) {
var storedItem = this.items[id];
if (!storedItem) {
storedItem = this.items[id] = {item: item, qty: 0, price: 0};
}
storedItem.qty++;
storedItem.price = storedItem.item.price * storedItem.qty;
this.totalQty++;
this.totalPrice += storedItem.item.price;
};


this.generateArray = function() {
var arr = [];
for (var id in this.items) {
arr.push(this.items[id]);
}
return arr;
};
};

我尝试登录控制台以查看添加数字时发生的情况,它显示如下

    Cart {
items:
{ '5855c55482d8722419e21a7d': { item: [Object], qty: 1, price: 15 },
'5855c55482d8722419e21a7f': { item: [Object], qty: 1, price: 15 } },
totalQty: 2,
totalPrice: '01515',
add: [Function],
reduceByOne: [Function],
removeItem: [Function],
generateArray: [Function] }

我对 Node js 很陌生,我不确定这出了什么问题。

最佳答案

在您的模块中,更改此行

this.totalPrice = oldCart.totalPrice || 0;

变成这样

this.totalPrice = parseInt(oldCart.totalPrice, 10) || 0;

你也应该改变

this.totalPrice += storedItem.item.price;

像这样

this.totalPrice += parseInt(storedItem.item.price);

这里的问题是,当您第一次从请求中获取 this.totalPricestoredItem.item.price 时,它们都是字符串 - this.totalPrice 是一个字符串,因为 oldCart.totalPrice 将以字符串形式返回给您。

当您将它们添加在一起时,这会导致您的 storedItem.item.price 强制转换为字符串:

this.totalPrice += storedItem.item.price;
// string += string => concatenated string

关于javascript - 数字没有加在一起 Node js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com