Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

295
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!