Tengo un problema al enviar estos datos a un objeto anidado.
Esto es lo que puse en cartero como formato JSON:
"productId":"621256596fc0c0ef66bc99ca", "quantity":"10"aquí está mi código en mi controlador
module.exports.createOrder = async (data) => { let product = data.productId; let oQuantity = data.quantity let totAmount = data.totalAmount return User.findById(product).then(user =>{ user.userOrders.products.push({productId:product}) user.userOrders.products.push({quantity:oQuantity}) if (user) { return user.save().then((savedOrder,err)=>{ if (savedOrder) { return user } else { return 'Failed to create order. Please try again' } }) } else { return "try again" } }) }mi esquema es:
userOrders:[ { products:[ { productName:{ type: String, required: [true, "UserId is required"] }, quantity:{ type: Number, required: [true, "Quantity is required"] } } ], totalAmount:{ type: Number, required: [true, "Quantity is required"] }, PurchasedOn:{ type: Number, default: new Date() } } ] })tengo estos errores en mi CLI
user.userOrders.products.push({productId:product}) ^ TypeError: Cannot read properties of null (reading 'userOrders')Actualmente deseo simplemente poner estos datos del cartero en el objeto anidado, pero creo que no estoy usando bien el caso de uso de inserción. ¿Algun consejo?
user no se encuentra y contiene null . User.findById(product) devuelve un resultado vacío. El product ID no se puede encontrar en User . Primero, verifique si se encontró al usuario, luego, presione los productos:
module.exports.createOrder = async (data) => { let product = data.productId; let oQuantity = data.quantity let totAmount = data.totalAmount return User.findById(product).then(user => { if (!user) { return "try again"; } user.userOrders.products.push({productId:product}) user.userOrders.products.push({quantity:oQuantity}) return user.save().then((savedOrder, err) => { if (savedOrder) { return user; } else { return 'Failed to create order. Please try again'; } }); }); };