نوشتن APi, Route , Controller

در ادامه یک مثال از طراحی route , controller اورده شده است

Screenshot 2025-05-14 104259
  1. ایجاد ساختار پوشه‌ها برای Route و Controller
    - در ریشه پروژه پوشه‌های src/routes/ و src/controllers/ را بسازید
    - هر موجودیت (مثلاً requests و users) یک فایل Route و یک فایل Controller دارد
    - ساختار نهایی:
    src/
    ├─ controllers/
    │  ├─ requestController.js
    │  └─ userController.js
    └─ routes/
       ├─ requestRoutes.js
       └─ userRoutes.js
    
  2. تعریف Routeها با استفاده از Express
    - در src/routes/requestRoutes.js مسیرهای CRUD را تعریف کنید:
    import { Router } from 'express';
    import {
      createRequest,
      getAllRequests,
      getRequestById,
      updateRequest,
      deleteRequest
    } from '../controllers/requestController.js';
    

    const router = Router();

    router.post('/', createRequest); router.get('/', getAllRequests); router.get('/:id', getRequestById); router.put('/:id', updateRequest); router.delete('/:id', deleteRequest);

    export default router;

  3. ایجاد Controllerها با منطق کاری
    - در src/controllers/requestController.js توابع CRUD را پیاده کنید:
    import Request from '../models/request.js';
    

    export const createRequest = async (req, res, next) => { try { const newReq = await Request.create({ userId: req.body.userId, expertId: req.body.expertId, text: req.body.text }); res.status(201).json(newReq); } catch (err) { next(err); } };

    export const getAllRequests = async (_req, res, next) => { try { const list = await Request.findAll(); res.json(list); } catch (err) { next(err); } };

    export const getRequestById = async (req, res, next) => { try { const item = await Request.findByPk(req.params.id); if (!item) return res.status(404).json({ message: 'Not found' }); res.json(item); } catch (err) { next(err); } };

    export const updateRequest = async (req, res, next) => { try { const [updated] = await Request.update(req.body, { where: { requestId: req.params.id } }); if (!updated) return res.status(404).json({ message: 'Not found' }); res.json({ message: 'Updated' }); } catch (err) { next(err); } };

    export const deleteRequest = async (req, res, next) => { try { const deleted = await Request.destroy({ where: { requestId: req.params.id } }); if (!deleted) return res.status(404).json({ message: 'Not found' }); res.status(204).end(); } catch (err) { next(err); } };

  4. وصل کردن Routeها به اپلیکیشن اصلی
    - در src/app.js یا index.js این کار را انجام دهید:
    import express from 'express';
    import bodyParser from 'body-parser';
    import requestRoutes from './routes/requestRoutes.js';
    import userRoutes    from './routes/userRoutes.js';
    

    const app = express(); app.use(bodyParser.json());

    app.use('/api/requests', requestRoutes); app.use('/api/users', userRoutes);

    // هندلینگ خطا app.use((err, _req, res, _next) => { console.error(err); res.status(500).json({ error: err.message }); });

    export default app;