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);
Controller file defines the function:
const getAllUsers = (req, res) => {
// logic to get users
};
When /users is requested, router calls the controller.
4. Structure Example
project/
│
├── routes/
│ └── userRoutes.js
│
├── controllers/
│ └── userController.js
│
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;
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" });
}
};
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);
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" });
});
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)
This is a really useful guide!
Clear explanations with code samples - perfect for beginners learning how routers and controllers work together.