尝试从客户端发送数据,但请求会话无法正常工作

2022-02-27 00:00:00 client express javascript

我正在尝试做POST请求,当我和邮递员一起做时,它是非常成功的,但是我正在尝试从我的客户端发送它。我想邮寄购物车,但结果我总是邮寄数量为1的物品,实际上我要邮寄该请求多少次。修复此问题并以正常方式发布请求的最佳解决方案是什么?

  • 我正在使用会话,这可能会导致从前端发送请求时出现问题?

这是我的POST请求:

app.post("/add-to-cart/:id", async (req, res) => {
  try {
      const id = req.params.id;
      
      const { data }  = await axios.get("http://localhost:4200/products");
      const singleProduct = await data.find((product) => product._id === id);

    let cart;
    if (!req.session.cart) {
      req.session.cart = cart = new Cart({});
    } else {
      
      cart = new Cart(req.session.cart);
    }
    req.session.cart = cart;
    cart.addProduct(singleProduct);
    console.log(req.session.cart)
    res.send(cart);
    
  } catch (error) {
    console.log(error);
  }
});

这是Cart代码:

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

  this.addProduct = function(item) {
    let storedItem = this.productItems;
    if (!storedItem.hasOwnProperty("item")) {
      storedItem = this.productItems = {item: item, qty: 1, price: item.price};
      this.totalQty = 1;
      this.totalPrice = item.price;
    } else {
      storedItem = {item: item, qty: storedItem.qty, price: storedItem.price};
      console.log("STORED ITEM: ", storedItem);
      this.productItems = storedItem;
      storedItem.qty++;
      storedItem.price = storedItem.item.price * storedItem.qty;
      this.totalQty++;
      this.totalPrice += storedItem.item.price;
    }
  }
}

这是我用@click.prevent="addToCart()"

放在按钮上的功能
addToCart(){
      let productId = this.oneProduct.id;
      Cart.postCart(productId);
    }

我从前端的axios服务发送此消息:

postCart(productId){
        return cartService.post(`/add-to-cart/${productId}`);
    }

当我尝试在客户端与此交互时,没有任何警告或错误。这是我在后端得到的输出(不断重复单个产品的信息,但这在客户端正常工作):


解决方案

我认为此行有问题:

req.session.cart = cart = new Cart({});

此处解释了此分配未按预期工作的原因:Multiple left-hand assignment with JavaScript

您应该将其更改为:

cart = new Cart({}); 

逻辑的睡觉应该行得通。

相关文章