Preetam Datta
Preetam Datta

Reputation: 41

How to post form data to test multer node.js application in SoapUI

js application using multer npm package. The code looks like below:

var multer  = require('multer')
var upload = multer({ dest: 'avatars' })

router.post('/users/me/avatar', upload.single('avatar'), (req, res) => {
    res.send()
})

I am trying to test this endpoint using SoapUi.

screenshot of the request I am sending bySoapUi

However, I am getting the below below response from node.

MulterError: Unexpected field at wrappedFileFilter (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\multer\index.js:40:19) at Busboy. (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\multer\lib\make-middleware.js:114:7) at Busboy.emit (events.js:311:20) at Busboy.emit (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\busboy\lib\main.js:38:33) at PartStream. (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\busboy\lib\types\multipart.js:213:13) at PartStream.emit (events.js:311:20) at HeaderParser. (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\Dicer.js:51:16) at HeaderParser.emit (events.js:311:20) at HeaderParser._finish (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\HeaderParser.js:68:8) at SBMH. (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\HeaderParser.js:40:12) at SBMH.emit (events.js:311:20) at SBMH._sbmh_feed (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\streamsearch\lib\sbmh.js:95:16) at SBMH.push (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\streamsearch\lib\sbmh.js:56:14) at HeaderParser.push (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\HeaderParser.js:46:19) at Dicer._oninfo (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\Dicer.js:197:25) at SBMH. (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\Dicer.js:127:10)

Please help me resolve this. The file is not being saved in the destination directory.

Please let me know if you need any other information

Upvotes: 0

Views: 218

Answers (1)

Geovani Santos
Geovani Santos

Reputation: 391

Try this as middleware

const multer  = require('multer')

const dirStorage =  __dirname +'/avatas';

const storageOption = multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, req.dirStorageUser);
    },
    filename: function (req, file, cb) {
      cb(null, `new_avatar.png`);
    }
});

const upload = multer({
  storage: storageOption
}).single('upload');


router.post('/users/me/avatar', uploadMiddleware, (req, res) => {
    res.send("");
})


function uploadMiddleware(req, res, next) {

    if (!fs.existsSync(dirStorage)) {
      fs.mkdirSync(dirStorage);
    }

    upload(req, res, function (err) {
      let errorMsg;
      if (err instanceof multer.MulterError) {
        errorMsg = 'Was not possible save image';
      } else if (err) {
        errorMsg = 'Something was wrong on save image';
      }
   
      if (errorMsg) {
        return res.send(errorMsg);
      }
      return res.send("success");
      //next("route");
    });

}

:

Upvotes: 0

Related Questions