"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية بناء كود الواجهة الخلفية الخاص بك في Node.js (Express.js)

كيفية بناء كود الواجهة الخلفية الخاص بك في Node.js (Express.js)

تم النشر بتاريخ 2024-08-25
تصفح:634

How to Structure Your Backend Code in Node.js (Express.js)

عند تطوير تطبيق Node.js باستخدام Express.js، تعد هيكلة قاعدة التعليمات البرمجية الخاصة بك بشكل فعال أمرًا ضروريًا لقابلية الصيانة وقابلية التوسع وسهولة التعاون. يتيح لك هيكل المشروع المنظم جيدًا إدارة التعقيد، مما يسهل التنقل وفهم الكود. في هذه المدونة، سنستكشف بنية المجلد النموذجية لتطبيق Express.js ونشرح الغرض من كل دليل وملف.

نظرة عامة على هيكل المشروع
فيما يلي بنية المجلد الشائعة لتطبيق Express.js:

?
├── ? app.js
├── ? bin
├── ? config
├── ? controllers
│   ├── ? customer.js
│   ├── ? product.js
│   └── ...
├── ? middleware
│   ├── ? auth.js
│   ├── ? logger.js
│   └── ...
├── ? models
│   ├── ? customer.js
│   ├── ? product.js
│   └── ...
├── ? routes
│   ├── ? api.js
│   ├── ? auth.js
│   └── ...
├── ? public
│   ├── ? css
│   ├── ? js
│   ├── ? images
│   └── ...
├── ? views
│   ├── ? index.ejs
│   ├── ? product.ejs
│   └── ...
├── ? tests
│   ├── ? unit
│   ├── ? integration
│   ├── ? e2e
│   └── ...
├── ? utils
│   ├── ? validation.js
│   ├── ? helpers.js
│   └── ...
└── ? node_modules

شرح كل دليل وملف
app.js
يعد ملف app.js هو نقطة الدخول لتطبيقك. إنه المكان الذي تقوم فيه بتهيئة تطبيق Express وإعداد البرامج الوسيطة وتحديد المسارات وبدء تشغيل الخادم. فكر في الأمر كمركز التحكم لتطبيق الويب الخاص بك.

const express = require('express');
const app = express();
const config = require('./config');
const routes = require('./routes');
// Middleware setup
app.use(express.json());
// Routes setup
app.use('/api', routes);
// Start server
const PORT = config.port || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
module.exports = app;

بن
يحتوي دليل bin عادةً على نصوص برمجية لبدء تشغيل خادم الويب الخاص بك. يمكن استخدام هذه البرامج النصية لتعيين متغيرات البيئة أو إدارة بيئات مختلفة (مثل التطوير والإنتاج).

مثال: bin/www

#!/usr/bin/env node
const app = require('../app');
const debug = require('debug')('your-app:server');
const http = require('http');
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
const server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {
  const port = parseInt(val, 10);
  if (isNaN(port)) return val;
  if (port >= 0) return port;
  return false;
}
function onError(error) {
  if (error.syscall !== 'listen') throw error;
  const bind = typeof port === 'string' ? 'Pipe '   port : 'Port '   port;
  switch (error.code) {
    case 'EACCES':
      console.error(bind   ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind   ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}
function onListening() {
  const addr = server.address();
  const bind = typeof addr === 'string' ? 'pipe '   addr : 'port '   addr.port;
  debug('Listening on '   bind);
}

التكوين
يحتوي دليل التكوين على ملفات التكوين لتطبيقك، مثل اتصالات قاعدة البيانات وإعدادات الخادم ومتغيرات البيئة.

مثال: config/index.js

module.exports = {
  port: process.env.PORT || 3000,
  db: {
    host: 'localhost',
    port: 27017,
    name: 'mydatabase'
  }
};

وحدات التحكم
تحتوي وحدات التحكم على منطق التعامل مع الطلبات الواردة وإنشاء الاستجابات. يتوافق كل ملف في دليل وحدات التحكم عادةً مع جزء مختلف من تطبيقك (على سبيل المثال، العملاء والمنتجات).

مثال: وحدات التحكم/customer.js

const Customer = require('../models/customer');
exports.getAllCustomers = async (req, res) => {
  try {
    const customers = await Customer.find();
    res.json(customers);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
};

البرمجيات الوسيطة
تُستخدم وظائف البرامج الوسيطة لمعالجة الطلبات قبل وصولها إلى وحدات التحكم. يمكنهم التعامل مع مهام مثل المصادقة والتسجيل وطلب التحقق من الصحة.

مثال: middleware/auth.js

module.exports = (req, res, next) => {
  const token = req.header('Authorization');
  if (!token) return res.status(401).json({ message: 'Access Denied' });
  try {
    const verified = jwt.verify(token, process.env.JWT_SECRET);
    req.user = verified;
    next();
  } catch (err) {
    res.status(400).json({ message: 'Invalid Token' });
  }
};

نماذج
تحدد النماذج بنية بياناتك وتتعامل مع التفاعلات مع قاعدة البيانات. يتوافق كل ملف نموذج عادةً مع كيان بيانات مختلف (على سبيل المثال، العميل، المنتج).

مثال: النماذج/customer.js

const mongoose = require('mongoose');
const customerSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});
module.exports = mongoose.model('Customer', customerSchema);

الطرق
تحدد المسارات المسارات إلى أجزاء مختلفة من التطبيق الخاص بك وتعيينها إلى وحدات التحكم المناسبة.

مثال:ways/api.js

const express = require('express');
const router = express.Router();
const customerController = require('../controllers/customer');
router.get('/customers', customerController.getAllCustomers);
module.exports = router;

عام
يحتوي الدليل العام على ملفات ثابتة مثل CSS وJavaScript والصور التي يتم تقديمها مباشرة إلى العميل.

مثال: بنية الدليل

public/
├── css/
├── js/
├── images/

المشاهدات
طرق العرض هي قوالب تعرض HTML للعميل. باستخدام محرك النماذج مثل EJS أو Pug أو Handlebars، يمكنك إنشاء HTML ديناميكي.

مثال: طرق العرض/index.ejs



  My App
  


  

Welcome to My App

الاختبارات
يحتوي دليل الاختبارات على ملفات اختبار للتأكد من أن تطبيقك يعمل بشكل صحيح. غالبًا ما يتم تنظيم الاختبارات في اختبارات الوحدة، واختبارات التكامل، والاختبارات الشاملة (e2e).

مثال: بنية الدليل

tests/
├── unit/
├── integration/
├── e2e/

المستخدمات
يتم تخزين وظائف الأداة المساعدة والوحدات المساعدة في دليل الأدوات. تؤدي هذه الوظائف مهامًا شائعة مثل التحقق من الصحة والتنسيق المستخدمة في التطبيق.

مثال: utils/validation.js

exports.isEmailValid = (email) => {
  const re = /^[^\s@] @[^\s@] \.[^\s@] $/;
  return re.test(String(email).toLowerCase());
};

وحدات العقدة
يحتوي دليل Node_modules على جميع التبعيات التي يحتاجها مشروعك. تتم إدارة هذا الدليل بواسطة npm (أو الغزل) ويتضمن الحزم المثبتة من سجل npm.

خاتمة
يعمل تطبيق Node.js جيد التنظيم الذي يستخدم Express.js على تحسين قابلية الصيانة وقابلية التوسع والتعاون. يخدم كل دليل وملف في البنية غرضًا محددًا، بدءًا من التعامل مع التكوين وتحديد المسارات وحتى إدارة البرامج الوسيطة وطرق العرض. من خلال تنظيم قاعدة التعليمات البرمجية الخاصة بك بشكل فعال، يمكنك إنشاء تطبيقات قوية وقابلة للتطوير بسهولة.

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/kafeel_ahmad/how-to-tructure-your-backend-code-in-nodejs-expressjs-2e07؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفها.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3