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!

Did you find this tutorial useful? Say thanks by starring our repo on GitHub!

More Express Tutorials