How to make custom modules in node js

Node.js is great for creating modular server-side applications. In this post, we’ll create a simple project using modules, routing, and form handling.


Project Structure

Create 3 files:

  1. root.js (main server file)
  2. userForm.js (HTML form)
  3. userDataSubmit.js (handle form data)


root.js (Main Server File)

const http = require("http");
const userForm = require("./userForm");
const userDataSubmit = require("./userDataSubmit");

http
.createServer((req, resp) => {
resp.writeHead(200, { "Content-Type": "text/html" });

if (req.url === "/") {
userForm(req, resp);
} else if (req.url === "/submit") {
userDataSubmit(req, resp);
}

resp.end();
})
.listen(3200);


This file:

  1. Creates the HTTP server
  2. Routes / to form and /submit to form handler
  3. Sends HTML response based on the route


userForm.js (HTML Form)

function userForm(req, resp) {
resp.write(`
<form action="/submit" method="POST">
<input type="text" placeholder="Enter username" name="name" />
<input type="text" placeholder="Enter email" name="email" />
<button>Submit</button>
</form>
`);
}

module.exports = userForm;

This file:

  1. Displays a form with two input fields
  2. Sends data to /submit via POST method


userDataSubmit.js (Handle Form Data)

const querystring = require("querystring");

function userDataSubmit(req, resp) {
let dataBody = [];

req.on("data", (chunk) => {
dataBody.push(chunk);
});

req.on("end", () => {
let rawData = Buffer.concat(dataBody).toString();
let readableData = querystring.parse(rawData);

let dataString =
"My name is " +
readableData.name +
" and my email is " +
readableData.email;

console.log(dataString);
});

resp.write(`<h1>You can get data from user form here</h1>`);
}

module.exports = userDataSubmit;

This file:

  1. Listens to data from the form
  2. Collects data chunks using Buffer
  3. Converts it to a readable object using querystring
  4. Logs name and email in the console


Output Demo

node root.js


Open browser at:

http://localhost:3200/