শুরুতে সবাই একটা ভুল করে - সব route, সব logic, সব database query একটাই file-এ লিখে ফেলে। প্রথমে কাজ চলে, কিন্তু ১০টা endpoint হলেই কোন কোড কোথায় আছে খুঁজে পাওয়া কঠিন হয়ে যায়। Frontend-এ যেমন component আলাদা আলাদা রাখেন, backend-এও একই নিয়ম।
src/
routes/user.routes.ts
controllers/user.controller.ts
services/user.service.ts
middlewares/auth.middleware.tsপ্রতিটার কাজ আলাদা। Routes শুধু বলে কোন URL-এ কোন controller চলবে। Controller শুধু request নেবে আর response পাঠাবে, এর বেশি কিছু করবে না। আসল কাজ - database থেকে data আনা, হিসাব করা, নিয়ম check করা - সেটা করবে service। এতে দুটো সুবিধা হয়: একই service পরে অন্য জায়গা থেকে reuse করা যায়, আর test করাও সহজ হয়।
Middleware - request-এর পথে একেকটা checkpost
Middleware মানে request controller-এ পৌঁছানোর আগের ধাপগুলো। একটার পর একটা পার হয়ে request এগোয় - কোনোটা log করে, কোনোটা login check করে, কোনোটা data validate করে। প্রতিটা middleware-এর কাজ শেষ হলে next() ডাকতে হয়, নইলে request ওখানেই আটকে যাবে।
function logger(req, res, next) {
console.log(req.method, req.url);
next();
}
app.use(logger);
app.use("/users", userRoutes);
app.use(errorHandler); // সবসময় সবার শেষেOrder-টা এখানে খুব গুরুত্বপূর্ণ। Logger সবার আগে থাকলে সব request-এর হিসাব পাবেন। Auth middleware নির্দিষ্ট route-এর আগে থাকতে হবে, নইলে বিনা login-এই data চলে যাবে। আর error handler সবসময় সবার শেষে - কারণ Express উপর থেকে নিচে চলে, আর error নিচ থেকে ওই শেষ ধাপেই ধরা পড়ে।
সবাই যে ভুলটা করে
তিনটা ভুল বারবার দেখা যায়: auth check route-এর পরে লেখা (তখন check-টা আর কাজই করে না), error handler উপরে রাখা (নিচের error সেখানে পৌঁছায় না), আর middleware-এ next() ভুলে যাওয়া (frontend-এ request ঝুলে থাকে, কোনো response আসে না)।
আজকের Practice
পর্ব ১-এর ৩টা endpoint-কে এই structure-এ ভাগ করুন - routes, controllers, services আলাদা file-এ। একটা logger middleware যোগ করুন। আর শেষে একটা error handler রাখুন, যাতে ভুল route-এ গেলে সুন্দর একটা 404 response আসে।
Interview-এ কীভাবে বলবেন
আমি routes, controllers আর services আলাদা রাখি, যাতে প্রতিটা layer-এর দায়িত্ব পরিষ্কার থাকে আর কোড maintain করা সহজ হয়। Middleware order আমি সচেতনভাবে সাজাই - logger আগে, auth তারপর, error handling সবার শেষে, কারণ Express উপর থেকে নিচে execute করে।