Jan Schmutz
Jan Schmutz

Reputation: 890

Express File Upload. Handle Errors inside Formidable Parse (Server Side)

I have a question regarding the Formidable Module in Npm. Im using it to parse the incoming File from my Fileupload Frontend, and then save it locally using fs.rename. This already works, so far so good. I would now like to introduce a form of error Handling if the rename fails, but for some reason it tells me that I have a unhanded error (even though it is handled).

app.post('/upload/:id', function(req, res) {

var type = req.query.type;
console.log(type);
var clubId = req.params.id;
var fileName = clubId.toString();
console.log(clubId);


var form = new formidable.IncomingForm();
form.uploadDir = baseUrl + "indesign_test/sticker_pdfs/" + clubId;
form.on('file', function(field, file) {
    var originalName = file.name;
    if (originalName.indexOf('.pdf') >= 0 && type == '.pdf') {
        fs.rename(file.path, path.join(form.uploadDir, fileName + '.pdf', function(err) {
          if (err) console.log('Test Error: ' + err.code);  // <- Error Handling here
      });
    } else {
        console.log('Error Wrong Format, expected upload in Format of' + type);
    }

});
form.on('error', function(err) {
    console.log('An error has occured: \n' + err);
});
form.on('end', function() {
    res.end('success');
});

form.parse(req);
})

Instead I get this unhanded Error:

 events.js:182
  throw er; // Unhandled 'error' event
  ^

Error: ENOENT: no such file or directory, open '/Users/stickerstars-it-mbp/Desktop/indesign_test/sticker_pdfs/339/upload_be8ff3bd80f5cb2bf1658493157e459f'
stickertmbpsMBP:node-fileupload stickerstars-it-mbp$ 

Upvotes: 3

Views: 1034

Answers (1)

Jan Schmutz
Jan Schmutz

Reputation: 890

For some reason you can't save the upload-path on the form.uploadDir Object. Use a regular variable instead. Here's the updated code example:

var form = new formidable.IncomingForm();
//upload path on variable instead the form object
var uploadPath = baseUrl + "indesign_test/sticker_pdfs/" + clubId;

form.on('file', function(field, file) {
    var originalName = file.name;
    if (originalName.indexOf('.pdf') >= 0 && type == '.pdf') {
        fs.rename(file.path, path.join(uploadPath, fileName + '.pdf', function(err) {
          if (err) console.log('Test Error: ' + err.code);  
      });
    } else {
        console.log('Error Wrong Format, expected upload in Format of' + type);
    }

});

In this example the error handling works without problems

Upvotes: 1

Related Questions