Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

296
Visualizações
No se puede obtener el valor de un carrito antiguo (anterior)

Quiero "sobrescribir" mi carrito. Obtengo la información que quiero, pero el problema es que no puedo obtener la información de mi carrito anterior. No entiendo cómo no se puede recuperar correctamente. Y todo el tiempo obtengo una cantidad de 1.

Aquí está la solicitud app.post:

 app.post("/add-to-cart/:id", async (req, res) => { try { // fetch your data const id = req.params.id, { data } = await axios.get("http://localhost:4200/products"), singleProduct = await data.find((product) => product._id === id); // create/get a cart let cart; if (!req.session.cart) { req.session.cart = cart = new Cart({}); } else { // req.session does not save the Cart object, but saves it as JSON objects cart = new Cart(req.session.cart ? req.session.cart : {}); } console.log("This is variable cart: ",cart) cart.addProduct(singleProduct); res.redirect("/"); console.log(req.session) } catch (error) { console.log(error); } });

Parece que algo anda mal aquí: let cart = new Cart(req.body.cart ? req.body.cart : {});

Así que esta es la salida de console.log :

ingrese la descripción de la imagen aquí

Este es el código del Cart :

 module.exports = function Cart(oldCart) { this.productItems = oldCart.productItems || {}; this.totalQty = oldCart.totalQty || 0.00; this.totalPrice = oldCart.totalPrice || 0.00; this.addProduct = function(item) { let storedItem = this.productItems; if (!storedItem){ storedItem = this.productItems = {item: item, qty: 0, price: 0}; } else{ storedItem.qty++; this.totalQty ++; storedItem = {item: item, qty: storedItem.qty, price: storedItem.price} storedItem.price = storedItem.item.price * storedItem.qty; console.log("item from database",storedItem) this.totalPrice += storedItem.item.price; } } };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puede usar el paquete express-session para almacenar datos de sesión en el lado del servidor por sesión/usuario:

 const session = require("express-session"); app.use(session({ secret: "some secret" })); app.post("/add-to-cart/:id", async (req, res) => { try { // fetch your data const id = req.params.id, { data } = await axios.get("http://localhost:4200/products"), singleProduct = await data.find((product) => product._id === id); // create/get a cart let cart; if (!req.session.cart) { cart = new Cart({}); } else { // req.session does not save the Cart object, but saves it as JSON objects cart = new Cart(req.session.cart); } req.session.cart = cart; cart.addProduct(singleProduct); res.redirect("/"); } catch (error) { console.log(error); } });

Luego, si el cliente necesita obtener los datos del carrito, puede crear una ruta para eso:

 app.get("/get-cart", (req, res) => { const cartData = req.session.cart || {}; res.send(JSON.stringify(cartData)); });

En el código que proporcionó, también noté algunos problemas con su clase Cart .

Al configurar los valores predeterminados de totalQty y totalPrice , utiliza oldCart.totalQty || oldCart.totalQty==0.00 , que lo establecerá en totalQty , o un booleano que verifica si totalQty es 0.00 .

Además, su función storedItem verifica si el elemento almacenado es falso/verdadero, lo cual siempre será verdadero (valor predeterminado = {} ), da como resultado que su lógica use un objeto vacío para su elemento y genere errores prop of undefined .

Para arreglar esto: haz algo como:

 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; } } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda