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 (likeuser[name]=Johnbecomes{ 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
multermiddleware. - 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
