Express.js is the most widely used Node.js framework for building APIs and web apps. Letβs go step by step through the essentials.
π¦ 1. Setting Up Express
npm install express
const express = require("express");
const app = express();
app.use(express.json()); // Middleware to parse JSON bodies
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
π 2. Routing
Express routes define how your app responds to HTTP requests.
// GET route
app.get("/", (req, res) => {
res.send("Home Page");
});
// POST route
app.post("/users", (req, res) => {
const user = req.body;
res.status(201).json({ message: "User created", user });
});
// PUT route
app.put("/users/:id", (req, res) => {
const { id } = req.params;
res.send(`Updating user with ID: ${id}`);
});
// DELETE route
app.delete("/users/:id", (req, res) => {
const { id } = req.params;
res.send(`Deleting user with ID: ${id}`);
});
βοΈ 3. Middleware
Middleware functions run before route handlers and can modify req
, res
, or handle errors.
Example: Logging Middleware
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // Must call next() to continue
});
Example: Custom Middleware for Auth
const authMiddleware = (req, res, next) => {
const token = req.headers["authorization"];
if (!token) return res.status(401).json({ error: "Unauthorized" });
next();
};
app.use("/users", authMiddleware);
π 4. req
& res
Objects
-
req
(request): info about client request-
req.body
β JSON or form data -
req.params
β URL parameters -
req.query
β query string parameters -
req.headers
β HTTP headers
-
-
res
(response): sending data back-
res.send()
β send text/html -
res.json()
β send JSON -
res.status()
β set HTTP status -
res.redirect()
β redirect client
-
π 5. Query Params vs URL Params
URL Params
Defined in the route:
app.get("/users/:id", (req, res) => {
res.send(`User ID: ${req.params.id}`);
});
Request: /users/123
β req.params.id = '123'
Query Params
Passed in the URL after ?
:
app.get("/search", (req, res) => {
res.send(`Search query: ${req.query.q}`);
});
Request: /search?q=nodejs
β req.query.q = 'nodejs'
β 6. Error Handling
Express has special middleware for errors: (err, req, res, next)
// Route that throws an error
app.get("/error", (req, res) => {
throw new Error("Something went wrong!");
});
// Error-handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ message: err.message });
});
- Errors can also be passed with
next(err)
:
app.get("/fail", (req, res, next) => {
next(new Error("Failed request"));
});
β Summary
-
Routing: map HTTP methods + paths to handlers.
-
Middleware: reusable functions that run before or after routes.
-
req
&res
: request info and response methods. -
Params: URL params (
req.params
) vs query params (req.query
). -
Error handling: use error-handling middleware
(err, req, res, next)
for clean centralized error responses.