# Creating Routes and Handling Requests with Express

When you start building backend applications with Node.js, you’ll quickly realize that handling routes, requests, and responses manually can become repetitive and messy.

That’s where **Express.js** comes in.

* * *

## 📌 What is Express.js?

**Express.js** is a minimal and flexible web framework for Node.js that provides a structured way to build web applications and APIs.

Instead of writing everything from scratch using Node’s core modules, Express gives you:

*   Clean routing
    
*   Middleware support
    
*   Simplified request/response handling
    

* * *

## 🤔 Why Express Simplifies Node.js Development

Using the built-in `http` module in Node.js is powerful—but verbose.

### 🔴 Raw Node.js Example

```js
const http = require("http");

const server = http.createServer((req, res) => {
  if (req.url === "/" && req.method === "GET") {
    res.end("Hello World");
  }
});

server.listen(3000);
```

Problems:

*   Manual routing logic
    
*   Hard to scale
    
*   Poor readability
    

* * *

### 🟢 Express.js Equivalent

```js
const express = require("express");
const app = express();

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

app.listen(3000);
```

Much cleaner, right?

👉 Express abstracts away boilerplate so you can focus on logic instead of plumbing.

* * *

## ⚙️ Creating Your First Express Server

### Step 1: Install Express

```bash
npm init -y
npm install express
```

* * *

### Step 2: Create Server

```js
const express = require("express");
const app = express();

app.listen(3000, () => {
  console.log("Server running on port 3000");
});
```

* * *

## 🌐 Handling GET Requests

GET requests are used to **fetch data**.

```js
app.get("/", (req, res) => {
  res.send("Welcome to my server");
});
```

You can also use route paths:

```js
app.get("/about", (req, res) => {
  res.send("About Page");
});
```

* * *

## 📦 Handling POST Requests

POST requests are used to **send data to the server**.

First, enable JSON parsing middleware:

```js
app.use(express.json());
```

Now handle POST:

```js
app.post("/data", (req, res) => {
  const userData = req.body;
  res.send(`Received: ${JSON.stringify(userData)}`);
});
```

* * *

## 📤 Sending Responses

Express provides multiple response methods:

```js
res.send("Text response");
res.json({ message: "JSON response" });
res.status(200).send("Status set");
```

These make response handling far more intuitive compared to raw Node.js.

* * *

## 🧭 Understanding Routing (Core Concept)

Routing means defining how your server responds to different endpoints.

```js
app.get("/user", (req, res) => {
  res.send("User route");
});

app.post("/user", (req, res) => {
  res.send("Create user");
});
```

👉 Same route, different methods → different behavior.

* * *

## 🧠 Key Takeaways

*   Express.js is a **lightweight abstraction over Node.js**
    
*   It simplifies:
    
    *   Routing
        
    *   Request handling
        
    *   Response formatting
        
*   Makes your backend:
    
    *   Cleaner
        
    *   Scalable
        
    *   Easier to maintain
        

* * *

## 🔚 Final Thoughts

If you're serious about backend development, learning **Express.js** is non-negotiable. It’s the foundation for building APIs, full-stack apps, and scalable systems in Node.js.

Once you're comfortable with this, the next step is:

*   Middleware
    
*   Routing architecture
    
*   REST API design
