node.jsexpressmulterbusboy

Error handling when uploading file using multer with expressjs


I am using multer to save the file on server developed through express & nodejs.

I am usign following code.

var express = require('express'),
    multer  = require('multer')

var app = express()

app.get('/', function(req, res){
  res.send('hello world');
});

app.post('/upload',[ multer({ dest: './uploads/'}), function(req, res){

    res.status(204).end()
}]);

app.listen(3000);

Multer saves the file for me in the specified destination folder.

All this is working fine but I have following questions:

  1. If the file saving fails for various reasons, it looks like my route will always return status 204.
  2. I am not sure if status 204 is retured after file is saved or while the file is getting saved asynchronously, status 204 is returned.

Solution

  • You can handle errors using the onError option:

    app.post('/upload',[
      multer({
        dest    : './uploads/',
        onError : function(err, next) {
          console.log('error', err);
          next(err);
        }
      }),
      function(req, res) {
        res.status(204).end();
      }
    ]);
    

    If you call next(err), your route handler (generating the 204) will be skipped and the error will be handled by Express.

    I think (not 100% sure as it depends on how multer is implemented) that your route handler will be called when the file is saved. You can use onFileUploadComplete to log a message when the upload is done, and compare that to when your route handler is called.

    Looking at the code, multer calls the next middleware/route handler when the file has been uploaded completely.