Express.js Complete Guide: Routing, Middleware & Request Response Lifecycle

Imagine Running a Restaurant Without Staff

Let's return to our restaurant analogy.

Imagine you own a restaurant.

You have:

  • A building
  • Tables
  • Chairs
  • A kitchen
  • Food ingredients

Everything looks ready.

But there is one major problem.

You don't have:

  • Waiters
  • Cashiers
  • Order managers

Now every customer must:

  • Walk into the kitchen
  • Find a chef
  • Place orders directly
  • Collect food themselves
  • Handle billing

Very quickly the restaurant becomes chaotic.

The kitchen exists.

The food exists.

But managing customers becomes difficult.

Node.js without Express is somewhat similar.

Node.js gives us the power to create servers.

But handling requests manually becomes repetitive and difficult.

This is why Express.js was created.

Express.js Complete Guide: Routing, Middleware & Request Response Lifecycle



What Is Express.js?

Express.js is a lightweight web framework built on top of Node.js.

In simple words:

Express helps developers build web servers and APIs faster.

Instead of writing hundreds of lines of code manually,

Express provides ready-made tools.

This allows developers to focus on business logic.


Why Express.js Was Created

Let's see how developers used Node.js before Express.

Creating a simple server requires using the HTTP module.

Example:

const http = require("http");

const server = http.createServer((req, res) => {
res.end("Hello World");
});

server.listen(3000);

This works.

But imagine building AQAD.

We need:

  • Products API
  • Orders API
  • Authentication API
  • Payment API
  • Vendor API
  • Retailer API

Managing everything using only Node.js becomes difficult.

Express solves this problem.


Express Is Like a Smart Restaurant Manager

Think about a restaurant manager.

The manager:

  • Receives customers
  • Assigns tables
  • Coordinates staff
  • Organizes workflow

Express works similarly.

It helps:

  • Receive requests
  • Route requests
  • Handle responses
  • Organize APIs
  • Manage middleware

This makes backend development easier.


Why Developers Love Express.js

Express became one of the most popular backend frameworks because it is:

Simple

Easy to learn.


Fast

Minimal overhead.


Flexible

Works with almost any architecture.


Huge Community

Thousands of packages available.


Perfect for REST APIs

Most Node.js APIs use Express.


Installing Express

First create a Node.js project.

npm init -y

Install Express.

npm install express

Package installed.

Ready to build APIs.


Creating Our First Express Server

Create:

server.js

Code:

const express = require("express");

const app = express();

app.listen(3000, () => {
console.log("Server Running");
});

Run:

node server.js

Output:

Server Running

Congratulations.

You just created an Express server.


Understanding the Code

Let's break it down.


Import Express

const express = require("express");

This loads Express into our project.


Create Application

const app = express();

Creates an Express application.

Think of this as creating the restaurant itself.


Start Server

app.listen(3000);

Starts listening for requests.

Port:

3000

acts like the server's door.

Requests enter through this door.


What Is a Port?

Imagine an apartment building.

Address:

Building A

But multiple apartments exist inside.

Example:

Apartment 101
Apartment 102
Apartment 103

Computers work similarly.

IP Address:

Building

Port:

Apartment Number

Example:

localhost:3000

Port 3000 identifies our application.


Creating Our First Route

A route tells Express:

What should happen when a specific URL is requested?

Example:

app.get("/", (req, res) => {
res.send("Welcome to AQAD");
});

Now visiting:

http://localhost:3000

returns:

Welcome to AQAD

Understanding Routes

Think of routes as roads.

Different roads lead to different destinations.

Example:

/products
/orders
/users

Each route performs different actions.


GET Route Example

app.get("/products", (req, res) => {
res.send("Products List");
});

Visit:

localhost:3000/products

Response:

Products List

Creating Multiple Routes

app.get("/", (req, res) => {
res.send("Home");
});

app.get("/products", (req, res) => {
res.send("Products");
});

app.get("/orders", (req, res) => {
res.send("Orders");
});

Each route handles a different request.


Understanding Request and Response Objects

Every route receives:

req
res

req

Represents incoming request.

Contains:

  • URL
  • Headers
  • Parameters
  • Body
  • Query Strings

Think of it as:

Customer order details.


res

Represents outgoing response.

Contains:

What server sends back.

Think of it as:

Food delivered to the customer.


Example

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

Request arrives.

Response sent.

Simple.


Sending JSON Responses

Most APIs return JSON.

Example:

app.get("/products", (req, res) => {
res.json({
id: 1,
name: "Pepsi",
price: 12
});
});

Response:

{
"id":1,
"name":"Pepsi",
"price":12
}

This is how real APIs work.


AQAD Product API Example

app.get("/products", (req, res) => {

const products = [
{
id: 1,
name: "Pepsi"
},
{
id: 2,
name: "Coca Cola"
}
];

res.json(products);

});

Response:

[
{
"id":1,
"name":"Pepsi"
},
{
"id":2,
"name":"Coca Cola"
}
]

Now we are starting to build actual APIs.


POST Requests in Express

GET retrieves data.

POST creates data.

Example:

app.post("/products", (req, res) => {

res.send("Product Created");

});

This route handles product creation.


Why Express Makes Life Easier

Imagine building AQAD without Express.

You would manually handle:

  • URL parsing
  • Routing
  • Headers
  • Responses
  • Middleware
  • Error handling

Thousands of extra lines.

Express gives these features out of the box.


Common Express Methods

You'll use these daily.


GET

Fetch data.

app.get()

POST

Create data.

app.post()

PUT

Update data.

app.put()

DELETE

Delete data.

app.delete()

Real AQAD Route Design

Products:

app.get("/products")
app.post("/products")
app.put("/products/:id")
app.delete("/products/:id")

Orders:

app.get("/orders")
app.post("/orders")

Users:

app.get("/users")
app.post("/users")

This is the foundation of a REST API.


Route Parameters

Sometimes we need a specific resource.

Example:

/products/101

Product ID:

101

Express:

app.get("/products/:id", (req, res) => {

res.send(req.params.id);

});

Visiting:

/products/101

Returns:

101

Query Parameters

Used for filtering.

Example:

/products?category=beverages

Express:

app.get("/products", (req, res) => {

res.send(req.query.category);

});

Returns:

beverages

Very useful for searching and filtering.


Express Application Flow

Let's follow a real request.

Retailer opens:

/products

Request reaches Express.

Express matches route.

Route executes.

Database queried.

Response generated.

JSON returned.

Products appear on screen.

This flow powers almost every backend application.


Express Project Structure (Small Project)

Many beginners place everything inside one file.

Example:

server.js

Works initially.

But becomes messy.

A better structure:

project

├── server.js
├── routes
├── controllers
├── models
└── config

As AQAD grows,

organization becomes critical.

We'll build a professional structure later.


Why Express Dominates Startup Development

Many startups choose Express because:

  • Fast development
  • Huge ecosystem
  • Easy hiring
  • JavaScript everywhere
  • Excellent API support

Companies often build:

  • E-commerce
  • SaaS products
  • CRMs
  • Marketplaces

using Express.


Common Beginner Mistakes

Mistake 1

Forgetting to start server.

app.listen()

Mistake 2

Returning plain text instead of JSON.


Mistake 3

Writing all code in one file.


Mistake 4

Ignoring status codes.


Mistake 5

Not understanding routing.


Interview Questions

What is Express.js?

Express is a lightweight Node.js framework used for building web applications and APIs.


Why use Express instead of Node.js HTTP module?

Because Express simplifies routing, middleware, request handling, and API development.


What is app.listen()?

Starts the server and listens for incoming requests.


What is a route?

A route defines how the application responds to a specific URL and HTTP method.


Difference between req and res?

req contains incoming request information.

res sends responses back to the client.

 

Express Routing


Imagine a City Without Road Signs

Let's start with a simple example.

Imagine visiting a new city.

The city has:

  • Hospitals
  • Schools
  • Shopping malls
  • Restaurants
  • Airports

But there is one problem.

There are no road signs.

No directions.

No street names.

No navigation.

What happens?

People get lost.

Traffic becomes chaotic.

Finding destinations becomes difficult.

Applications face the same challenge.

Imagine AQAD has:

  • Products
  • Orders
  • Vendors
  • Retailers
  • Payments
  • Deliveries

Without proper routing, requests would have nowhere to go.

This is exactly why routing exists.


What Is Routing?

Routing is the process of deciding:

Which code should run when a specific request arrives?

Think of routing as:

A navigation system for your backend application.

When a request comes in:

GET /products

Express checks:

Which route handles /products?

Then executes the correct code.


Real AQAD Example

Retailer requests products.

GET /products

Express sends request to:

getProducts()

Vendor creates product.

POST /products

Express sends request to:

createProduct()

Retailer places order.

POST /orders

Express sends request to:

createOrder()

Routing acts like a traffic controller.


Basic Route Structure

You've already seen this:

app.get("/products", (req, res) => {

res.send("Products");

});

Let's break it down.


app

Express application.


get

HTTP method.


/products

Route path.


Callback Function

Code that runs when route is hit.


Think of it as:

If someone visits /products

Run this code

Different Route Types

Express supports all major HTTP methods.


GET Route

Retrieve data.

app.get("/products", (req, res) => {

res.send("Products");

});

POST Route

Create data.

app.post("/products", (req, res) => {

res.send("Product Created");

});

PUT Route

Update data.

app.put("/products/:id", (req, res) => {

res.send("Product Updated");

});

DELETE Route

Delete data.

app.delete("/products/:id", (req, res) => {

res.send("Product Deleted");

});

Why Routes Matter

Imagine AQAD eventually grows to:

Products
Orders
Payments
Retailers
Vendors
Deliveries
Notifications
Analytics

Each feature requires routes.

Without organization:

Your application becomes impossible to maintain.


Route Parameters

One of the most useful routing features.

Imagine retrieving product number 101.

URL:

GET /products/101

How does Express know:

101

is the product ID?

Using route parameters.


Example

app.get("/products/:id", (req, res) => {

res.send(req.params.id);

});

Request:

GET /products/101

Response:

101

Understanding req.params

Express automatically extracts values.

Example:

/products/500

Express creates:

req.params = {
id: "500"
}

Very convenient.


Multiple Parameters

Example:

/vendors/12/products/100

Express:

app.get(
"/vendors/:vendorId/products/:productId",
(req, res) => {

res.json(req.params);

}
);

Response:

{
"vendorId":"12",
"productId":"100"
}

This is extremely common in real projects.


AQAD Example

Get vendor-specific product.

Request:

GET /vendors/15/products/250

Meaning:

Vendor 15
Product 250

Backend can now fetch exactly the correct data.


Query Parameters

Parameters inside the URL.

Used for:

  • Searching
  • Filtering
  • Pagination
  • Sorting

Example

GET /products?category=beverages

Express:

req.query

contains:

{
category: "beverages"
}

Query Example

app.get("/products", (req, res) => {

const category = req.query.category;

res.send(category);

});

Request:

GET /products?category=beverages

Response:

beverages

Multiple Query Parameters

Example:

GET /products?page=1&limit=20

Express:

req.query

becomes:

{
page:"1",
limit:"20"
}

Very useful for pagination.


Real AQAD Search API

Retailer searches Pepsi.

Request:

GET /products?search=pepsi

Backend:

const search = req.query.search;

Database search runs.

Results returned.

Simple.

Professional.

Practical.


Route Order Matters

Many beginners make this mistake.

Example:

app.get("/:id", handler1);

app.get("/products", handler2);

Request:

GET /products

Unexpected result.

Why?

Because Express checks routes from top to bottom.

It sees:

/:id

first.

Therefore:

products

becomes the id.


Correct Order

Specific routes first.

app.get("/products", handler);

app.get("/:id", handler);

This avoids confusion.


Handling 404 Routes

What if the route doesn't exist?

Example:

GET /unknown-route

Express should respond properly.


Example

app.use((req, res) => {

res.status(404).json({
message: "Route Not Found"
});

});

Now invalid routes return meaningful responses.


Why Large Applications Need Route Separation

Initially beginners write:

server.js

containing everything.

Example:

app.get(...)
app.post(...)
app.put(...)
app.delete(...)

Works for 5 routes.

Disaster for 500 routes.


AQAD Route Explosion

Imagine AQAD has:

Products:

10 routes

Orders:

15 routes

Users:

20 routes

Payments:

15 routes

Deliveries:

10 routes

Notifications:

10 routes

Now you have:

80+ routes

One file becomes unmanageable.


Express Router

Express solves this problem with:

Router()

Think of Router as:

A mini application inside Express.


Creating Product Routes

File:

routes/productRoutes.js
const express = require("express");

const router = express.Router();

router.get("/", (req, res) => {

res.send("Products");

});

module.exports = router;

Connecting Router

server.js

const express = require("express");

const app = express();

const productRoutes =
require("./routes/productRoutes");

app.use("/products", productRoutes);

Now:

GET /products

works automatically.


Why Router Is Important

Instead of:

server.js

containing everything,

we organize routes by feature.


Professional Project Structure

Small projects:

project

├── server.js

Professional projects:

project

├── routes
│ ├── productRoutes.js
│ ├── orderRoutes.js
│ ├── userRoutes.js

├── controllers

├── services

├── middleware

├── models

└── config

Much cleaner.

Much easier to scale.


Controllers and Routing

A common professional pattern:

Route:

router.get(
"/",
getProducts
);

Controller:

const getProducts = (
req,
res
) => {

res.send("Products");

};

This separates:

Routing logic

from

Business logic.

A very important concept.


AQAD Route Architecture

Let's design some routes.


Product Routes

GET    /products
GET /products/:id
POST /products
PUT /products/:id
DELETE /products/:id

Order Routes

GET    /orders
GET /orders/:id
POST /orders
PUT /orders/:id

Vendor Routes

GET    /vendors
GET /vendors/:id
POST /vendors
PUT /vendors/:id

Retailer Routes

GET    /retailers
POST /retailers

Payment Routes

POST /payments
GET /payments/:id

This is how large systems are designed.


Route Naming Best Practices

Professional developers follow conventions.


Use Nouns

Good:

/products
/orders
/users

Bad:

/getProducts
/createOrder
/deleteUser

Use Plural Names

Good:

/products
/vendors
/orders

Consistent.

Predictable.


Route Versioning

Real applications evolve.

Version APIs.

Example:

/api/v1/products

Later:

/api/v2/products

Benefits:

  • Backward compatibility
  • Easier upgrades
  • Safer deployments

Common Routing Mistakes

Mistake 1

Writing all routes in one file.


Mistake 2

Using unclear route names.

Bad:

/getStuff

Mistake 3

Ignoring API versioning.


Mistake 4

Mixing business logic inside routes.


Mistake 5

Incorrect route order.


Real Request Flow

Retailer opens AQAD.

Request:

GET /products

Express receives request.

Router identifies route.

Controller executes.

Database queried.

Products returned.

JSON response sent.

Retailer sees products.

This is exactly how production systems work.


Interview Questions

What is routing?

Routing determines which code executes when a specific request arrives.


What is Express Router?

Express Router is a mini application used to organize routes into separate modules.


Difference between req.params and req.query?

req.params

Used for route parameters.

Example:

/products/101

req.query

Used for query parameters.

Example:

/products?page=1

Why separate routes into files?

To improve scalability, readability, and maintainability.


Why does route order matter?

Because Express matches routes from top to bottom.

 

Middleware Explained


The Security Guard at the Entrance

Imagine AQAD has a large corporate headquarters.

Inside the building are:

  • Vendor Department
  • Retailer Department
  • Finance Department
  • Analytics Department
  • Admin Department

Every day hundreds of people arrive.

Some are:

  • Vendors
  • Retailers
  • Employees
  • Visitors

Now imagine there is no security at the entrance.

Anyone can walk in.

Anyone can access confidential information.

Anyone can enter restricted departments.

Sounds dangerous, right?

That is why companies hire security guards.

Before anyone enters:

The security guard checks:

  • Identity card
  • Visitor pass
  • Access permissions

Only then are people allowed to proceed.

Middleware works exactly like that security guard.


What Is Middleware?

Middleware is a function that executes:

Between the request and the response.

It sits in the middle.

That is why it is called:

Middle + Ware = Middleware

Think of the request journey:

Client

Middleware

Route

Response

Middleware can:

  • Allow requests
  • Block requests
  • Modify requests
  • Log requests
  • Validate data
  • Authenticate users

Before the request reaches the actual route.


Why Middleware Exists

Imagine AQAD has 100 APIs.

Examples:

/products
/orders
/vendors
/payments
/deliveries
/analytics

Suppose every API requires login verification.

Without middleware:

Every route would contain repeated code.

Example:

app.get("/products", (req, res) => {

// verify token

});

app.get("/orders", (req, res) => {

// verify token

});

app.get("/vendors", (req, res) => {

// verify token

});

The same code repeated everywhere.

This becomes difficult to maintain.

Middleware solves this problem.


Understanding Middleware Flow

Let's see what happens when a request arrives.

Request:

GET /products

Flow:

Request

Middleware

Route

Response

Middleware gets the first opportunity to inspect the request.


Middleware Function Structure

A middleware function receives three arguments.

(req, res, next)

Example:

const middleware = (
req,
res,
next
) => {

console.log("Middleware");

next();

};

Understanding req

Contains incoming request information.

Examples:

req.body
req.params
req.query
req.headers

Think of it as:

The visitor information.


Understanding res

Used to send responses.

Example:

res.send()
res.json()
res.status()

Think of it as:

The final decision made by the security guard.


Understanding next()

This is the most important part.

Example:

next();

Means:

Continue to the next step.

Without next()

The request stops.


Security Guard Analogy

Visitor arrives.

Security guard checks ID.

If valid:

Proceed inside.

Equivalent:

next();

If invalid:

Access denied.

Equivalent:

return res.status(401)

Middleware decides what happens.


Creating Our First Middleware

Example:

const logger = (
req,
res,
next
) => {

console.log(
"Request Received"
);

next();

};

Use:

app.use(logger);

Now every request passes through this middleware.


Request Flow Example

Request:

GET /products

Console:

Request Received

Then route executes.

This is middleware in action.


app.use()

Express provides:

app.use()

Used to register middleware.

Example:

app.use(logger);

Meaning:

Apply logger middleware
to all requests.

Global Middleware

Middleware applied everywhere.

Example:

app.use(logger);

Request:

/products
/orders
/users

All routes pass through logger.


Route-Specific Middleware

Sometimes only certain routes need protection.

Example:

app.get(
"/orders",
authMiddleware,
getOrders
);

Only:

/orders

requires authentication.


Authentication Middleware

One of the most common middleware types.

Remember our security guard?

Authentication middleware checks:

Who are you?

Before allowing access.


Example

const authMiddleware =
(req, res, next) => {

const token =
req.headers.authorization;

if (!token) {

return res
.status(401)
.json({
message:
"Unauthorized"
});

}

next();

};

AQAD Example

Retailer requests:

GET /orders

Middleware checks:

Valid Token?

If yes:

Proceed

If no:

401 Unauthorized

Validation Middleware

Another extremely useful middleware.

Imagine a vendor creates a product.

Request:

{
"name":"",
"price":-10
}

Clearly invalid.

Validation middleware catches issues before data reaches the database.


Example

const validateProduct =
(req, res, next) => {

const {
name
} = req.body;

if (!name) {

return res
.status(400)
.json({
message:
"Name Required"
});

}

next();

};

Why Validation Matters

Without validation:

Database becomes polluted with bad data.

Examples:

Empty names
Negative prices
Invalid emails
Wrong phone numbers

Professional applications always validate.


Logging Middleware

Imagine managing AQAD.

Thousands of requests occur daily.

How do you know:

  • Which API was called?
  • When it was called?
  • Who called it?

Logging middleware records this information.


Example

const logger =
(req, res, next) => {

console.log(
req.method,
req.url
);

next();

};

Request:

GET /products

Output:

GET /products

Very useful for debugging.


Multiple Middleware Functions

Requests can pass through many middleware layers.

Example:

app.get(
"/orders",
logger,
authMiddleware,
validateUser,
getOrders
);

Flow:

Request

Logger

Authentication

Validation

Controller

Response

This happens in real production applications.


Middleware Execution Order

Order matters.

Example:

app.use(logger);

app.use(authMiddleware);

Flow:

Logger

Authentication

Reverse order changes behavior.

Always be intentional.


Built-In Express Middleware

Express provides useful middleware.


JSON Middleware

Example:

app.use(
express.json()
);

Allows Express to read JSON request bodies.

Without it:

req.body

will be undefined.


Example

Request:

{
"name":"Pepsi"
}

Express parses it automatically.


Custom Middleware

Most real applications create their own middleware.

Examples:

Authentication
Authorization
Validation
Activity Logs
Rate Limiting
Audit Logs

AQAD will require many custom middleware functions.


Middleware Folder Structure

Professional projects organize middleware separately.

Example:

project

├── middleware
│ ├── auth.js
│ ├── validation.js
│ ├── logger.js
│ ├── errorHandler.js

├── routes
├── controllers
├── services

This keeps the project clean.


AQAD Middleware Architecture

Imagine the request:

POST /products

Vendor creates product.

Flow:

Request

Logger Middleware

Authentication Middleware

Authorization Middleware

Validation Middleware

Controller

Database

Response

Every layer has a specific responsibility.

This is how large-scale applications are built.


Common Middleware Types in Production

Authentication

Verify user identity.


Authorization

Verify permissions.


Validation

Validate request data.


Logging

Track requests.


Error Handling

Handle application errors.


Rate Limiting

Prevent abuse.


File Upload

Process images and documents.


CORS

Allow frontend applications to communicate.

We'll cover many of these later in the pillar.


Common Beginner Mistakes

Mistake 1

Forgetting next()

Request hangs forever.


Mistake 2

Sending response and calling next().

Can cause unexpected behavior.


Mistake 3

Writing huge middleware functions.

Keep middleware focused.


Mistake 4

Incorrect middleware order.


Mistake 5

Putting business logic inside middleware.

Middleware should have a specific responsibility.


Real AQAD Scenario

Retailer attempts to view orders.

Request:

GET /orders

Authentication middleware checks token.

Authorization middleware checks role.

Logging middleware records activity.

Controller fetches orders.

Database queried.

Orders returned.

Response:

200 OK

This entire flow happens in seconds.


Interview Questions

What is middleware?

Middleware is a function that executes between the request and response cycle.


Why is middleware used?

To perform common operations such as authentication, validation, logging, and error handling.


What are the parameters of middleware?

req
res
next

What happens if next() is not called?

The request stops and never reaches the next middleware or route.


What is app.use()?

Used to register middleware in Expres.

 

Request and Response Lifecycle


What Really Happens When a User Clicks a Button?

Let's start with a simple question.

Imagine a retailer using AQAD.

They open the application and click:

Place Order

Within a few seconds:

Order Created Successfully

appears on the screen.

To the user, it feels simple.

They clicked a button.

They received a result.

Done.

But as backend developers, we know something important.

Behind that single click, dozens of operations happen.

Understanding those operations is one of the biggest steps toward becoming a professional backend developer.


The Journey of a Request

Think about ordering food online.

You:

  1. Open app
  2. Select food
  3. Place order
  4. Restaurant receives order
  5. Kitchen prepares food
  6. Delivery partner picks it up
  7. Food reaches you

A web request follows a similar journey.


High-Level Request Lifecycle

When a user clicks a button:

Client

Internet

Server

Middleware

Route

Controller

Database

Controller

Response

Client

This is the backbone of every backend application.


AQAD Example

Retailer places an order.

Request:

POST /orders

Let's follow the request step by step.


Step 1: User Performs an Action

Retailer clicks:

Place Order

Frontend collects information.

Example:

{
"productId": 101,
"quantity": 5
}

The frontend prepares an HTTP request.


Step 2: HTTP Request Is Created

The application generates:

POST /orders

Headers:

Authorization: Bearer TOKEN
Content-Type: application/json

Body:

{
"productId": 101,
"quantity": 5
}

Request is ready.


Step 3: Request Travels Through the Internet

Now the request leaves the user's device.

It travels through:

  • Mobile Network
  • ISP
  • Routers
  • Internet Infrastructure

Eventually reaching the AQAD server.

Remember Chapter 2?

This is where:

  • DNS
  • IP Addresses
  • Routers
  • Protocols

become important.


Step 4: Express Server Receives Request

Server receives:

POST /orders

Express begins processing.

Think of Express as the reception desk.

It receives every incoming request.


Step 5: Middleware Begins Execution

Before reaching business logic,

middleware gets involved.

Example:

Request

Logger Middleware

Authentication Middleware

Validation Middleware

Each middleware performs a specific task.


Logging Middleware

First layer.

Example:

console.log(
req.method,
req.url
);

Output:

POST /orders

Useful for monitoring.


Authentication Middleware

Next step.

Security guard checks identity.

Request contains:

Authorization: Bearer TOKEN

Middleware verifies:

  • Token validity
  • User existence
  • Session authenticity

If invalid:

401 Unauthorized

Response sent immediately.

Lifecycle ends.


Validation Middleware

Suppose token is valid.

Next:

Validate request data.

Incoming request:

{
"productId": 101,
"quantity": 5
}

Checks:

  • Product ID exists?
  • Quantity provided?
  • Quantity greater than zero?

If validation fails:

400 Bad Request

Response returned.

Lifecycle ends.


Step 6: Route Matching

Request survives middleware.

Express now looks for a matching route.

Example:

router.post(
"/orders",
createOrder
);

Route found.

Controller executes.


Understanding Controllers

Think of controllers as department managers.

The controller decides:

What business operation should happen?

Example:

createOrder()

Controller contains business logic.


Step 7: Business Logic Executes

Now the real work begins.

Controller may perform:

Verify retailer
Check inventory
Calculate pricing
Apply discounts
Generate order ID
Create invoice

All before touching the database.


AQAD Example

Retailer wants:

5 Pepsi Bottles

Backend checks:

Inventory:

Available = 50
Requested = 5

Inventory sufficient.

Continue.


Step 8: Database Interaction

Controller now communicates with the database.

Example:

Order.create()

or

INSERT INTO orders

depending on the database.

Database stores:

{
"orderId": "AQ12345",
"productId": 101,
"quantity": 5
}

Order successfully saved.


Why Database Is Important

Without a database:

Order disappears after request ends.

Databases provide:

  • Persistence
  • Reliability
  • Data retrieval

Every major application depends on them.


Step 9: Database Responds

Database returns result.

Example:

{
"id":"AQ12345",
"status":"created"
}

Controller receives the response.


Step 10: Controller Builds Response

Controller creates a user-friendly response.

Example:

res.status(201).json({
message:
"Order Created Successfully"
});

Response prepared.


Step 11: Response Travels Back

Response begins its return journey.

Server

Internet

Mobile App

Exactly opposite of the request journey.


Step 12: Frontend Receives Response

Frontend receives:

{
"message":
"Order Created Successfully"
}

Now UI updates.

Display:

Order Created Successfully

User sees the result.

Lifecycle complete.


Complete AQAD Lifecycle Visualization

Retailer Clicks Button

HTTP Request Created

Internet

Express Server

Logger Middleware

Authentication Middleware

Validation Middleware

Route

Controller

Database

Controller

Response

Internet

Mobile App

User Sees Result

This entire sequence often happens in less than one second.


What Happens If Something Fails?

Not every request succeeds.

Professional systems must handle failures gracefully.


Failure Scenario 1: Invalid Token

Authentication middleware:

Token Invalid

Response:

401 Unauthorized

Lifecycle stops.


Failure Scenario 2: Validation Error

Request:

{
"quantity": -10
}

Response:

400 Bad Request

Lifecycle stops.


Failure Scenario 3: Product Not Found

Database search:

Product Not Found

Response:

404 Not Found

Lifecycle stops.


Failure Scenario 4: Database Failure

Database unavailable.

Response:

500 Internal Server Error

Lifecycle stops.


Why Understanding Lifecycle Matters

Many beginners learn:

app.get()
app.post()

But don't understand what happens behind the scenes.

Professional developers think differently.

When debugging they ask:

Did request reach server?
Did middleware run?
Did route execute?
Did database respond?
Did response return?

Understanding lifecycle helps answer these questions quickly.


Real Debugging Example

AQAD retailers complain:

Orders Not Creating

Backend developer investigates.


Step 1

Did request arrive?

Check logs.


Step 2

Did authentication pass?

Check token.


Step 3

Did validation pass?

Check payload.


Step 4

Did controller execute?

Check logs.


Step 5

Did database respond?

Check database.


Step 6

Was response sent?

Check API response.

This systematic approach solves most backend problems.


Express Lifecycle Internally

Express processes requests in this order:

Request

Middleware 1

Middleware 2

Middleware 3

Route

Controller

Response

Each layer has a responsibility.

This separation keeps applications maintainable.


Real AQAD Order Creation Flow

Let's visualize a production-grade request.

Request:

POST /orders

Logger Middleware

Request Logged

Authentication Middleware

User Verified

Authorization Middleware

Retailer Access Confirmed

Validation Middleware

Data Valid

Controller

Create Order

Database

Order Saved

Response

201 Created

Frontend

Order Successful

Exactly how a real marketplace operates.


Common Beginner Mistakes

Mistake 1

Thinking request directly reaches database.

Many layers exist before that.


Mistake 2

Ignoring middleware order.


Mistake 3

Not handling failure cases.


Mistake 4

Mixing business logic everywhere.


Mistake 5

Not understanding response generation.


Interview Questions

What is the request-response lifecycle?

It is the complete journey of a request from client to server and back to the client.


What executes first?

Middleware.


Where does business logic usually live?

Controllers.


When is the database accessed?

After validation and route processing.


What happens if middleware returns a response?

The lifecycle stops immediately.

Post a Comment

0 Comments