codingstuff.io
ExploreTutorialsProblemsCS Subjects
Get Started
ExploreTutorialsProblemsCS Subjects
Get Started
codingstuff.io

Master the art of building software through interactive tutorials, real-world problems, and guided projects.

Pune, Maharashtra, India

codingstuffmail@gmail.com

Product

  • Explore
  • Tutorials
  • Problems
  • CS Subjects

Company

  • About
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Sitemap

© 2026 codingstuff.io. All rights reserved.

Built with ❤️ for developers everywhere

/
/
All Tutorials
🟢

Node.js

23 / 63 topics
19Middleware20Express Framework21Routing22Templates23Handling Forms24Sessions25Authentication26API Development
Tutorials/Node.js/Handling Forms
🟢Node.js

Handling Forms

Updated 2026-04-20
2 min read

Introduction

Handling forms is a fundamental aspect of web development, allowing users to interact with your application by submitting data. In this tutorial, we will explore how to handle forms in a Node.js environment using Express.js, a popular and powerful framework for building web applications.

Prerequisites

Before diving into the tutorial, ensure you have the following installed:

  • Node.js (version 14 or higher)
  • npm (Node Package Manager)
  • Basic knowledge of JavaScript and Node.js
  • Familiarity with HTML forms

Setting Up the Project

First, let's set up a basic Express application. Open your terminal and run the following commands to create a new directory for your project and initialize it:

mkdir node-forms-tutorial
cd node-forms-tutorial
npm init -y

Next, install Express.js by running:

npm install express

Create an index.js file in your project directory and set up a basic Express server:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

Creating a Simple Form

Let's create a simple HTML form that users can submit. Create a views directory in your project and add an index.html file:

<!-- views/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Form Example</title>
</head>
<body>
    <h1>Contact Form</h1>
    <form action="/submit-form" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required><br><br>
        
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required><br><br>

        <label for="message">Message:</label>
        <textarea id="message" name="message" rows="4" cols="50"></textarea><br><br>

        <button type="submit">Submit</button>
    </form>
</body>
</html>

Update your index.js to serve this HTML file:

const express = require('express');
const path = require('path');
const app = express();
const port = 3000;

app.use(express.static(path.join(__dirname, 'public')));

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

Handling Form Submissions

To handle form submissions, we need to parse the incoming request body. Express.js provides middleware for this purpose. Install body-parser, a popular middleware for parsing JSON and URL-encoded bodies:

npm install body-parser

Update your index.js to use body-parser and define a route to handle form submissions:

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const app = express();
const port = 3000;

app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({ extended: true }));

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

app.post('/submit-form', (req, res) => {
    const { name, email, message } = req.body;
    console.log('Form Data:', { name, email, message });
    res.send('Form submitted successfully!');
});

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

Validating Form Data

It's crucial to validate user input to ensure data integrity and security. We can use a library like express-validator for this purpose:

npm install express-validator

Update your index.js to include validation middleware:

const express = require('express');
const bodyParser = require('body-parser');
const { check, validationResult } = require('express-validator');
const path = require('path');
const app = express();
const port = 3000;

app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({ extended: true }));

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

app.post('/submit-form', 
    [
        check('name').notEmpty().withMessage('Name is required'),
        check('email').isEmail().withMessage('Invalid email address'),
        check('message').isLength({ min: 10 }).withMessage('Message must be at least 10 characters long')
    ],
    (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        
        const { name, email, message } = req.body;
        console.log('Form Data:', { name, email, message });
        res.send('Form submitted successfully!');
    }
);

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

Handling File Uploads

To handle file uploads, we can use the multer middleware. Install it using npm:

npm install multer

Update your index.js to include file upload handling:

const express = require('express');
const bodyParser = require('body-parser');
const { check, validationResult } = require('express-validator');
const path = require('path');
const multer = require('multer');
const app = express();
const port = 3000;

app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({ extended: true }));

// Configure multer for file uploads
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/');
    },
    filename: function (req, file, cb) {
        cb(null, Date.now() + '-' + file.originalname);
    }
});

const upload = multer({ storage: storage });

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

app.post('/submit-form', 
    [
        check('name').notEmpty().withMessage('Name is required'),
        check('email').isEmail().withMessage('Invalid email address'),
        check('message').isLength({ min: 10 }).withMessage('Message must be at least 10 characters long')
    ],
    upload.single('file'), // Handle file upload
    (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        
        const { name, email, message } = req.body;
        console.log('Form Data:', { name, email, message });
        console.log('File Uploaded:', req.file);

        res.send('Form submitted successfully!');
    }
);

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

Conclusion

In this tutorial, we covered the basics of handling forms in a Node.js application using Express.js. We learned how to create simple HTML forms, handle form submissions with body-parser, validate user input using express-validator, and handle file uploads with multer. These skills are essential for building robust web applications that interact with users effectively.

Remember to always validate and sanitize user inputs to prevent security vulnerabilities such as SQL injection and cross-site scripting (XSS). Additionally, consider using more advanced form handling libraries or frameworks like Formik or React Hook Form if you're working with React.


PreviousTemplatesNext Sessions

Recommended Gear

TemplatesSessions