Loading

Quipoin Menu

Learn • Practice • Grow

express-js / ExpressJS Form Data Handling
tutorial

ExpressJS Form Data Handling

Imagine you're filling out a form on a website signing up for a newsletter, creating an account, or placing an order. When you click submit, all that information travels to the server. In Express, handling form data is a common task, and it's made easy with built-in middleware.

Types of Form Data

There are two main ways forms send data:
  • application/x-www-form-urlencoded Regular HTML forms (key=value pairs)
  • multipart/form-data Forms that include file uploads

Handling URL-Encoded Form Data

For regular HTML forms, Express provides built-in middleware: express.urlencoded(). This parses the incoming form data and makes it available in req.body.
const express = require('express');
const app = express();

// Parse URL-encoded form data
app.use(express.urlencoded({ extended: true }));

app.post('/submit-form', (req, res) => {
// Access form data from req.body
const name = req.body.name;
const email = req.body.email;
const message = req.body.message;

console.log('Form submitted:', { name, email, message });

res.send(`Thank you ${name}! We received your message.`);
});

HTML Form Example






The 'extended' Option Explained

The extended option determines how nested objects are parsed:
  • { extended: true } Uses the qs library to parse nested objects (like user[name]=John becomes { user: { name: 'John' } })
  • { extended: false } Uses the querystring library, which doesn't support nested objects

Handling Multipart Form Data (File Uploads)

For forms with file uploads, you need a third-party middleware like multer. Express doesn't handle multipart data by default.
// Install: npm install multer

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

// Handle single file upload
app.post('/upload', upload.single('profilePic'), (req, res) => {
// req.file contains the uploaded file
console.log(req.file);
// req.body contains text fields
console.log(req.body);
res.send('File uploaded successfully');
});

// Handle multiple files
app.post('/upload-multiple', upload.array('photos', 5), (req, res) => {
// req.files is an array of uploaded files
console.log(req.files);
res.send('Files uploaded');
});

HTML Form for File Upload





Complete Example: Registration Form
const express = require('express');
const app = express();

// Parse URL-encoded form data
app.use(express.urlencoded({ extended: true }));

// Serve HTML form
app.get('/register', (req, res) => {
res.send(`







`);
});

// Handle form submission
app.post('/register', (req, res) => {
const { username, password, email, country } = req.body;

// In a real app, you'd validate and save to database
console.log('New registration:', { username, email, country });

res.send(`Registration successful! Welcome ${username}`);
});

Two Minute Drill
  • Use express.urlencoded({ extended: true }) for regular HTML form data.
  • Form data becomes available in req.body.
  • For file uploads, use multer middleware.
  • The enctype="multipart/form-data" attribute is required in HTML for file uploads.
  • Always validate form data on the server never trust client input!

Need more clarification?

Drop us an email at career@quipoinfotech.com