Chapters of Frontend Dev থেকে Full-Stack Backend

Week 1 - API FoundationChapter 2 of 282 min read

Englishবাংলা

Project structure আর middleware chain - কোড বড় হলেও যাতে গোলমাল না হয়

Routes, controllers, services আলাদা করা, middleware-এর order, next() আর error handler

শুরুতে সবাই একটা ভুল করে - সব 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 করে।

All chapters of Frontend Dev থেকে Full-Stack Backend