Handle POST Form Data with Express JS

Jan 10, 2022

Express doesn't handle FormData instances by default. FormData is useful for tasks like uploading a file. You need to use a separate FormData parser, like Formidable, as shown below.

const formidable = require('formidable');

app.post('/upload', function(req, res) {
  const form = new formidable.IncomingForm();
  // Parse `req` and upload all associated files. `files` contains
  // all files that were uploaded with the form.
  form.parse(req, function(err, fields, files) {
    if (err) {
      return res.status(400).json({ error: err.message });
    const [firstFileName] = Object.keys(files);

    res.json({ filename: firstFileName });

Want to become your team's Express expert? There's no better way to really grok a framework than to write your own clone from scratch. In 15 concise pages, this tutorial walks you through how to write a simplified clone of Express called Espresso. Get your copy!

Espresso supports:
  • Route handlers, like `app.get()` and `app.post()`
  • Express-compatible middleware, like `app.use(require('cors')())`
  • Express 4.0 style subrouters
As a bonus, Espresso also supports async functions, unlike Express.

Get the tutorial and master Express today!

More Express Tutorials