DEV Community

Nimra Kosar
Nimra Kosar

Posted on

Complete guide for router and controller with debugging

1. What is a Router:

A router in backend frameworks (like Express.js) defines how your app responds to client requests (GET, POST, PUT, DELETE) on specific URLs.
It decides which controller function should handle a request.

Example concept:

Client → /api/users
Router → Finds a matching route → Calls UserController.getAllUsers

Purpose:

Organizes endpoints.
Keeps code modular and readable.
Separates routing logic from business logic.

2. What is a Controller

A controller contains the logic for handling requests.
It performs actions like:
Reading data from request (req.body, req.params)
Communicating with databases
Sending responses back to clients

Purpose:

Keep logic separate from routes.
Make debugging and updates easier.
Reuse business logic in different routes.

3. How Router and Controller Work Together

Router file defines the endpoint:

router.get('/users', getAllUsers);

Enter fullscreen mode Exit fullscreen mode

Controller file defines the function:

const getAllUsers = (req, res) => {
  // logic to get users
};
Enter fullscreen mode Exit fullscreen mode

When /users is requested, router calls the controller.

4. Structure Example

project/
│
├── routes/
│   └── userRoutes.js
│
├── controllers/
│   └── userController.js
│
Enter fullscreen mode Exit fullscreen mode

userRoutes.js

import express from 'express';
import { getAllUsers, createUser } from '../controllers/userController.js';

const router = express.Router();

router.get('/', getAllUsers);
router.post('/', createUser);

export default router;

Enter fullscreen mode Exit fullscreen mode

userController.js

export const getAllUsers = (req, res) => {
  try {
    res.status(200).json({ message: "Users fetched successfully" });
  } catch (error) {
    res.status(500).json({ message: "Error fetching users" });
  }
};

Enter fullscreen mode Exit fullscreen mode

app.js

import express from 'express';
import userRoutes from './routes/userRoutes.js';

const app = express();
app.use(express.json());
app.use('/api/users', userRoutes);

app.listen(3000);

Enter fullscreen mode Exit fullscreen mode

5. Debugging Techniques

Console Logging

Log req.body, req.params, req.query to verify data.

Example:

console.log("User ID:", req.params.id);

Use Debuggers

VS Code: Add breakpoints in controller files.

Run app in debug mode (node --inspect app.js).

Error Middleware
Add a global error handler:


app.use((err, req, res, next) => {
  console.error("Error:", err.message);
  res.status(500).json({ message: "Something went wrong" });
});
Enter fullscreen mode Exit fullscreen mode

Test Routes

Use Postman or Thunder Client.
Send GET, POST, PUT, DELETE requests.
Check response codes (200, 400, 500).
CORS Check

Install CORS:

npm install cors

Use it:
import cors from 'cors';
app.use(cors());

Top comments (1)

Collapse
 
linjunjie525 profile image
Lin JunJie

This is a really useful guide!
Clear explanations with code samples - perfect for beginners learning how routers and controllers work together.