How to Get POST Data in Node ?

Handling POST data is a fundamental aspect of developing web applications and APIs using Node.js. POST requests are used when a client needs to send data to the server, such as submitting form data, uploading files, or sending JSON payloads. This article will cover various methods to retrieve and handle POST data in Node.js, enhancing your server-side capabilities.

Introduction to POST Requests

POST requests are a type of HTTP request used to send data to the server to create or update resources. Unlike GET requests, which append data to the URL, POST requests include data in the request body, making them suitable for sending large amounts of data or sensitive information.

Steps to Create the Application

Step 1: Now, initialize a new Node.js project with default configurations using the following command on the command line.

npm init -y

Step 2: Now install Express inside your project using the following command on the command line.

npm install express

Project Structure:

Table of Content

  • Using the http Module
  • Using the querystring Module
  • Using Express

Using the http Module

You can handle POST data by creating an HTTP server using Node.js’s built-in http module. Here’s a basic example of how to parse POST data.

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let data = '';
req.on('data', chunk => {
data += chunk.toString();
});
req.on('end', () => {
console.log('POST data:', data);
res.end('Data received');
});
} else {
res.end('Send a POST request to this endpoint');
}
});

server.listen(3000, () => {
console.log('Server running on port 3000');
});

Using the querystring Module

If the POST data is in URL-encoded format, you can use the querystring module to parse it.

const http = require('http');
const querystring = require('querystring');

const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let data = '';
req.on('data', chunk => {
data += chunk.toString();
});
req.on('end', () => {
const postData = querystring.parse(data);
console.log('POST data:', postData);
res.end('Data received');
});
} else {
res.end('Send a POST request to this endpoint');
}
});

server.listen(3000, () => {
console.log('Server running on port 3000');
});

Using Express

Express.js simplifies the process of handling HTTP requests, including POST requests. Let’s dive into a practical example of handling POST data with Express.js:

Approach

  • The index.html file includes a form with two inputs for username and password.
  • When the form is submitted, a POST request is sent to the home route (“/”) of the server.
  • The request body contains the username and password, and the header includes an authorization token.
  • The server handles the POST request using the app.post() method.
  • The server responds by sending back the username, password, and authorization token.
  • These details are printed to the console for further examination.

Example: Implementation to show how to get POST data in nodejs.

HTML
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <title>POST DEMO</title>
</head>

<body>
    <form>
        <div>
            <label>Username</label>
            <input type="text" id="user" />
        </div>
        <div>
            <label>Password</label>
            <input type="password" 
                   id="pass" />
        </div>
        <button type="submit">
            Submit
          </button>
    </form>

    <script>
        document.querySelector('button')
            .addEventListener('click', (e) => {
                e.preventDefault();
                const username = document
                    .querySelector('#user').value;

                const password = document
                    .querySelector('#pass').value;
                    
                fetch('/', {
                    method: 'POST',
                    headers: {
                        Authorization: 'Bearer abcdxyz',
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({
                        username,
                        password,
                    }),
                })
                    .then((res) => {
                        return res.json();
                    })
                    .then((data) => console.log(data));
            });
    </script>
</body>

</html>
Javascript
// Importing express module
const express = require('express');
const app = express();

app.use(express.json());

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

app.post('/',
    (req, res) => {
        const { username, password } = req.body;
        const { authorization } = req.headers;
        res.send(
            {
                username,
                password,
                authorization,
            });
    });

app.listen(3000,
    () => {
        console.log(
            'Our express server is up on port 3000'
        );
    });

Steps to run the Application

node app.js

Output: Open the browser and go to http://localhost:3000 and you will see the following output.

Conclusion

Handling POST data in Node.js is a crucial aspect of building server-side applications. Whether you’re using built-in modules, middleware, or third-party libraries, understanding how to retrieve and process POST data is essential for building robust and scalable web applications. Choose the method that best fits your project’s requirements and development preferences to efficiently handle POST requests in Node.js.