Recibo los siguientes errores al hacer algunos cambios, pero nunca se resuelven
TypeError [ERR_INVALID_ARG_TYPE]: el argumento "ruta" debe ser de tipo cadena o una instancia de Buffer o URL. Recibido indefinido
Esto sucede cuando intento crear un producto y subo una imagen a través del cartero, resuelva que lo necesito.
Capturas de pantalla del código
Producto Route.js' Product.js
Producto Controller.js Producto Controller
Modelo de producto Modelo de producto
Código si no aparece la imagen
Ruta del producto -
const express = require("express") const router = express.Router() const { create } = require("../controllers/product") const { requireSignin, isAdmin, isAuth } = require("../controllers/auth") const { userById } = require("../controllers/user") //Routes router.post("/product/create/:userId", requireSignin, isAdmin, create) router.param("userId", userById) module.exports = routerControlador de producto-
const formidable = require("formidable") const _ = require("lodash") const fs = require("fs") const Product = require("../models/product") const { errorHandler } = require("../helpers/dbErrorHandler") exports.create = (req, res) => { let form = new formidable.IncomingForm() form.keepExtensions = true form.parse(req, (err, fields, files) => { if (err) { return res.status(400).json({ err: "Image cannot be uploaded", }) } let product = new Product(fields) if (files.photo) { product.photo.data = fs.readFileSync(files.photo.path) product.photo.contentType = files.photo.type } product.save((err, result) => { if (err) { console.log(err) } res.json(result) }) }) }En Product Controller, cambie files.photo.path a files.photo.filepath y también cambie files.photo.type a files.photo.mimetype
Controlador de producto
const formidable = require("formidable") const _ = require("lodash") const fs = require("fs") const Product = require("../models/product") const { errorHandler } = require("../helpers/dbErrorHandler") exports.create = (req, res) => { let form = new formidable.IncomingForm() form.keepExtensions = true form.parse(req, (err, fields, files) => { if (err) { return res.status(400).json({ err: "Image cannot be uploaded", }) } let product = new Product(fields) if (files.photo) { product.photo.data = fs.readFileSync(files.photo.filepath) product.photo.contentType = files.photo.mimetype } product.save((err, result) => { if (err) { console.log(err) } res.json(result) }) }) }