Getting error when saving form data and file buffer together in mongodb

Problem :1) getting validator error when saving file buffer together in mongo
2) getting [Object: null prototype] {} when console logging req.body

router file

const express=require('express');
const router=new express.Router();
const {renderCreateProductPage,createProducts}=require('../controllers/create products controller')
const multer=require('multer');

router.use(express.urlencoded({extended: true}));
router.use(express.json())

const upload=multer({
    limits:500000,
    fileFilter(req,file,cb){
        if(!file.originalname.match(/\.(jpg|jpeg|png)$/)){
            return cb(new Error('please upload JPEG,JPG,PNG file extension'));// sending error
        }
        cb(undefined,true);
    }
})

router.get('/admin-panel/products/create-product',renderCreateProductPage)
router.post('/admin-panel/products/create-product/recorded',upload.single('image'),createProducts);
module.exports=router

controller file

const {CreateProduct}= require('../database/model');

exports.renderCreateProductPage=(req,res)=>{
    res.render('create-product');
}

exports.createProducts=async(req,res)=>{
    console.log(req.body);
    const createProductsInstance= new CreateProduct();
    createProductsInstance.name=req.body.name;
    createProductsInstance.price=req.body.price;
    createProductsInstance.size=req.body.size;
    createProductsInstance.stock=req.body.stock;
    createProductsInstance.unit=req.body.unit;
    createProductsInstance.category=req.body.category;
    createProductsInstance.brand=req.body.brand;
    // createProductsInstance.images=req.file.buffer;
    console.log(req.file);
    try{
        await createProducts.save()
        res.send('success');
    }
    catch(error){
        console.log(error)
        res.status(404).send('not successfull');
    }
}

err in console

server fired off

connection sucessful
[Object: null prototype] {}
{
  fieldname: 'image',
  originalname: 'profile-pic.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  buffer: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff e1 00 8c 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 05 01 12 00 03 00 00 00 01 00 01 ... 223959 more bytes>,
  size: 224009
}
Error: register products validation failed: name: Path `name` is required., price: Path `price` is required., size: Path `size` is required., 
stock: Path `stock` is required., unit: Path `unit` is required., category: Path `category` is required., brand: Path `brand` is required.    
    at ValidationError.inspect (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\error\validation.js:48:26)
    at formatValue (node:internal/util/inspect:782:19)
    at inspect (node:internal/util/inspect:347:10)
    at formatWithOptionsInternal (node:internal/util/inspect:2167:40)
    at formatWithOptions (node:internal/util/inspect:2029:10)
    at console.value (node:internal/console/constructor:324:14)
    at console.log (node:internal/console/constructor:360:61)
    at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\trial.js:52:21
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  errors: {
    name: ValidatorError: Path `name` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaString.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'name',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    price: ValidatorError: Path `price` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaNumber.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'price',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    size: ValidatorError: Path `size` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaString.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'size',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    stock: ValidatorError: Path `stock` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaNumber.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'stock',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    unit: ValidatorError: Path `unit` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaString.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'unit',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    category: ValidatorError: Path `category` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaString.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'category',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    brand: ValidatorError: Path `brand` is required.
        at validate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1337:13)
        at SchemaString.SchemaType.doValidate (c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\schematype.js:1321:7)
        at c:\Users\mahir\OneDrive\Documents\E Commerce Project\backend\node_modules\mongoose\lib\document.js:2830:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'brand',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    }
  },
  _message: 'register products validation failed'
}
type or paste code here


the problem is that the route handler is not implemented correctly: it returns upload middelware, and the response is not handled

you need to split them, export upload and create, and then call them in the POST handler:

controller.js file:

exports.upload = upload.single(‘image’);

//create and save new user
exports.create = (req, res, next)=>{
router.js file:

//API
route.post(‘/api/users’, controller.upload, controller.create);

Regards,
Rachel Gomez

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.