Estoy tratando de cargar una imagen con un cuerpo de datos json. He visto cómo hacer la solicitud en cartero, pero en mi terminal, obtengo lo siguiente al registrar en la consola el req.body
[Object: null prototype] { '': '"product": "pokemon"' }al iniciar sesión req.body.product devuelve como indefinido
La imagen se cargó correctamente y se creó un nuevo producto, pero sin datos json. Al enviar la solicitud solo con el cuerpo y sin imagen, también está funcionando. ¿Cómo puedo hacer que funcionen juntos?
Aquí está mi código:
export const addNewProduct = async (req, res, next) => { const userId = req.params.userId; const user = await User.findById(userId); if (!user) { return next(createError(404, "User with id"+ ${userId} +"not found")); } try { let result; if (req.file !== undefined && req.file.path !== undefined) { result = await cloudinary.v2.uploader.upload(req.file.path, { folder: `capstone/products/${userId}`, }); } console.log(req.body); const newProductData = { // product: req.body.product, // amount: req.body?.amount || "", // untis: req.body?.units || "", // price: req.body?.price || "", ...req.body, businessId: userId, image: result?.url || req.body?.image || "https://via.placeholder.com/300/09f/fff.png", cloudinary_id: result?.public_id || "", }; const newProduct = new Product(newProductData); const createdProduct = await newProduct.save(); res.status(200).send(createdProduct); } catch (error) { if (error.name === "ValidationError") { next(createError(400, error)); } else { next(createError(500, error)); } } };Quiero usar el mismo punto final que estoy creando un nuevo "producto", y quiero la opción de cargar una imagen con sus detalles cuando se crea. Luego, la URL de Cloudinary se almacena en el producto.
Ejemplo de json:
{ "producto": "juguete", "precio": "1,99", "cantidad": "1", "estado": "alto"} solo el producto es una cadena obligatoria en el modelo. * haciendo una verificación de middleware para ver si es único.
en cartero usé auto, application/json, multipart/form-data, etc. También agregué en ocasiones separadas "data" o "json" en el par de claves
He logrado resolverlo con lo siguiente: solución POSTMAN
Y en el front-end, tenía que agregar todos los objetos, no solo la imagen cuando se enviaba una imagen. por lo tanto, todo bajo formdata. y una declaración if sin el archivo de imagen adjunto, enviándolo como JSON normal. Gracias por todos los aportes, aprendí mucho en el camino.