البرمجة

تنظيم نقاط نهاية Express: أفضل ممارسات لفصل ملفات Routes وتحسين الصيانة

في عملية تطوير تطبيق Express الخاص بك، يمكن أن يكون من الأمور الهامة تنظيم ملفات الـ routes بشكل فعال، وفي هذا السياق، يمكنك إنشاء ملف منفصل يحتوي على جميع نقاط نهاية الـ API الخاصة بك. دعونا نقوم بفصل ملف الـ routes وتنظيم الشيفرة:

أولاً وقبل البدء، يمكنك إنشاء مجلد جديد يسمى routes داخل مجلد src/api، ونضع فيه ملف الـ routes الخاص بك، وسنسمي هذا الملف routes.js.

الآن، دعنا نقوم بتعديل ملف الـ server.js الخاص بك:

javascript
import path from 'path' import express from 'express' import webpack from 'webpack' import webpackDevMiddleware from 'webpack-dev-middleware' import webpackConfig from './webpack.config.dev' const app = express(); // يمكننا استخدام app.use() لتوجيه جميع الطلبات إلى ملف الـ routes الجديد app.use('/api', require('./src/api/routes/routes')); app.use(webpackDevMiddleware(webpack(webpackConfig), { publicPath: webpackConfig.output.publicPath })); app.use('/public', express.static(__dirname + '/public')) app.get('*', function(req, res) { res.sendFile(path.join(__dirname, 'index.html')); }); app.listen(3000, 'localhost', function (err) { if (err) { console.log(err); return; } });

الآن، دعنا نقوم بتعديل ملف src/api/routes/routes.js:

javascript
import express from 'express'; import moviesRouter from './movies'; // نقوم بتوجيه الطلبات ذات الصلة بالأفلام إلى ملف الـ movies import movieRouter from './movie'; // نقوم بتوجيه الطلبات ذات الصلة بفيلم واحد إلى ملف الـ movie const router = express.Router(); // يمكنك استخدام app.use() لتحديد نقاط نهاية إضافية حسب الحاجة router.use('/movies', moviesRouter); router.use('/movie', movieRouter); export default router;

الآن، يمكنك رؤية كيف تم تقسيم نقاط نهاية الـ API الخاصة بك بشكل أفضل، حيث يمكنك إضافة مزيد من الملفات وتوجيه الطلبات بسهولة باستخدام app.use() و router.use() بشكل فعال ومنظم. هذا النهج يسهل عليك فهم وصيانة التطبيق بشكل أفضل.

المزيد من المعلومات

بالطبع، دعوني أوسع في الشرح حول كيفية تنظيم ملفات الـ routes والتحكم بنقاط نهاية الـ API بشكل أفضل.

  1. استخدام ملفات الـ index:
    يمكنك استخدام ملفات index.js داخل كل مجلد لتسهيل التصفح وتنظيم الكود. فمثلا، يمكنك إنشاء ملف index.js داخل مجلد src/api/routes يقوم بتجميع وتصدير كل ملفات الـ routes الموجودة في المجلد، وهذا يسهل التفاعل مع الكود بشكل أفضل.

    src/api/routes/index.js:

    javascript
    import express from 'express'; import moviesRouter from './movies'; import movieRouter from './movie'; const router = express.Router(); router.use('/movies', moviesRouter); router.use('/movie', movieRouter); export default router;

    وبعد ذلك، يمكنك في server.js استخدام:

    javascript
    app.use('/api', require('./src/api/routes'));
  2. استخدام middleware مخصص:
    يمكنك كذلك إنشاء middleware مخصص يقوم بتحميل وتوجيه ملفات الـ routes بشكل ديناميكي، مما يسهل إضافة مزيد من النقاط النهائية دون الحاجة إلى تعديل ملف server.js الخاص بك.

    src/api/routes/loader.js:

    javascript
    import fs from 'fs'; import path from 'path'; import express from 'express'; const router = express.Router(); fs.readdirSync(__dirname).forEach((file) => { if (file !== 'loader.js' && file.endsWith('.js')) { const route = require(`./${file}`); router.use(`/${path.parse(file).name}`, route); } }); export default router;

    وفي server.js:

    javascript
    app.use('/api', require('./src/api/routes/loader'));

    بهذه الطريقة، يمكنك إضافة ملفات جديدة داخل مجلد src/api/routes وستتم إضافتها تلقائياً إلى نقاط النهاية.

  3. استخدام Express Router في ملفات الـ routes:
    يمكنك أيضاً تحسين ملفات الـ routes الخاصة بك باستخدام express.Router() بشكل أفضل لتنظيم الشيفرة وجعلها أكثر قابلية لإعادة الاستخدام والصيانة.

    src/api/routes/movies.js:

    javascript
    import express from 'express'; const router = express.Router(); router.get('/', function(req, res) { res.json({}); }); export default router;

    src/api/routes/movie.js:

    javascript
    import express from 'express'; const router = express.Router(); router.get('/:id', function(req, res) { // لوجيك الحصول على فيلم بناءً على الـ ID res.json({}); }); export default router;

    هذا يجعل كل ملف route يدير نفسه بشكل مستقل ويجعل من السهل فهم وصيانة الكود.

زر الذهاب إلى الأعلى