Reputation: 395
I have trying to add my products in the cart and also trying to get the totalPrice but it shows error. Here, is My error:- enter image description here. Here, Is the code of my shop.js:-
exports.postCart = (req, res, next) => {
const prodId = req.body.productId;
Product.findById(prodId, product => {
Cart.addProduct(prodId, product.price);
});
res.redirect('/cart');
};
Here, Is the code of cart.js file:-
const fs = require('fs');
const path = require('path');
const p = path.join(
path.dirname(process.mainModule.filename),
'data',
'cart.json'
);
module.exports = class Cart {
static addProduct(id, productPrice) {
// Fetch the previous cart
fs.readFile(p, (err, fileContent) => {
let cart = { products: [], totalPrice: 0 };
if (!err) {
cart = JSON.parse(fileContent);
}
// Analyze the cart => Find existing product
const existingProductIndex = cart.products.findIndex(
prod => prod.id === id
);
const existingProduct = cart.products[existingProductIndex];
let updatedProduct;
// Add new product/ increase quantity
if (existingProduct) {
updatedProduct = { ...existingProduct };
updatedProduct.qty = updatedProduct.qty + 1;
cart.products = [...cart.products];
cart.products[existingProductIndex] = updatedProduct;
} else {
updatedProduct = { id: id, qty: 1 };
cart.products = [...cart.products, updatedProduct];
}
cart.totalPrice = cart.totalPrice + +productPrice;
fs.writeFile(p, JSON.stringify(cart), err => {
console.log(err);
});
});
}
};
Here, Is the code of product.js file:-
const fs = require('fs');
const path = require('path');
const p = path.join(
path.dirname(process.mainModule.filename),
'data',
'products.json'
);
const getProductsFromFile = cb => {
fs.readFile(p, (err, fileContent) => {
if (err) {
cb([]);
} else {
cb(JSON.parse(fileContent));
}
});
};
module.exports = class Product {
constructor(title, imageUrl, description, price) {
this.title = title;
this.imageUrl = imageUrl;
this.description = description;
this.price = price;
}
save() {
this.id = Math.random().toString();
getProductsFromFile(products => {
products.push(this);
fs.writeFile(p, JSON.stringify(products), err => {
console.log(err);
});
});
}
static fetchAll(cb) {
getProductsFromFile(cb);
}
static findById(id, cb) {
getProductsFromFile(products => {
const product = products.find(p => p.id === id);
cb(product);
});
}
};
And If I remove the product.price from my shop.js file so it give me no error but when i add the price it gives me error.
Upvotes: 0
Views: 176
Reputation: 26075
Looks like you are trying to add product to cart which wasn't found by findById
method. Just add if condition in your callback to verify search result like.
exports.postCart = (req, res, next) => {
const prodId = req.body.productId;
Product.findById(prodId, product => {
if (product) {
Cart.addProduct(prodId, product.price);
} else {
// log error or warn user
}
});
res.redirect('/cart');
};
Upvotes: 1