primera pregunta que publico aquí. Estoy aprendiendo js y tratando de hacer algunas API para un proyecto universitario. Tengo el cuerpo de la API que pasa un objeto JSON así:
[ { "id":1, "issueDate":"2021/11/29 09:33", "state": "DELIVERED", "products": [{"SKUId":12,"description":"a product","price":10.99,"qty":30}, {"SKUId":180,"description":"another product","price":11.99,"qty":20},...], "supplierId" : 1, "transportNote":{"deliveryDate":"2021/12/29"}, "skuItems" : [{"SKUId":12,"rfid":"12345678901234567890123456789016"},{"SKUId":12,"rfid":"12345678901234567890123456789017"},...] }, ... ]Tengo problemas para analizar productos en una matriz de objetos de productos.
class Product { constructor(SKUId,description,price, qty,) { this.id = id; this.price = price; this.SKUId = SKUId; this.qty = qty; this.description = description; }; } module.exports = Product;Y al final este es el código que uso para el análisis:
try { if (Object.keys(req.body).length === 0) { return res.status(422).json({ error: `Empty body request` }).end(); } if (!validate_date(req.body.issueDate) ){ return res.status(422).json({ error:`Issue Date Not Valid ` }).end(); } if (req.body.products === undefined) return res.status(422).json({ error: `Products not defined in the call` }).end(); if (req.body.supplierId === undefined) return res.status(422).json({ error: `SupplierId Not defined` }).end(); let lastID = await db.getLastIdFromTable('RestockOrder'); let trID = incrementID(lastID); let order = new Restock_order(trID, req.body.issueDate, "ISSUED", req.body.supplierId, undefined); await db.createRestockOrder(order); //THIS IS THE LINE OF THE CODE THAT DOESNT WORK const products = req.body.products.map((x) => new Product(x.SKUId, x.description, x.price, x.qty)); order.addProducts(products); products.forEach(async (x) => await db.addProductToSKURestockTable(x)); return res.status(200).end(); }Después del comando const products = req.body.products.map((x) => new Product(x.SKUId, x.description, x.price, x.qty)); el código lanza una excepción (atrapada en un bloque try-catch) y no sé cuál es el problema real en el análisis. Gracias a todos los que me ayuden a solucionar esto
su producto de clase no es válido y el constructor debe comenzar desde el parámetro id
const products = req.body.products.map((x) => new Product(x.id,x.SKUId,... and so on class Product { id: number; price: number; qty: number; description: string; SKUId:number; constructor(id:number,SKUId:number,description:string,price:number, qty:number) { this.id = id; this.price = price; this.SKUId = SKUId; this.qty = qty; this.description = description; }; }Cuando llama a request.body, ya está en la matriz, por lo que no es necesario agregar la parte .products