تعلم Backend من الصفر: دليل شامل لـNode.js وExpress وREST API وAuthentication
أنت ممكن تكون عارف تعمل صفحة Login بالـ HTML و CSS و JavaScript، وشكلها وتصميمها ممتاز جداً. لكن السؤال الحقيقي: لما المستخدم يدوس "دخول"، مين هيتأكد إن الإيميل والباسورد صح؟ فين هتتخزن بيانات المستخدمين؟ إزاي الـ Frontend هيتواصل مع قاعدة البيانات؟ وإزاي تعمل نظام API و Authentication آمن؟
الإجابة باختصار هي: الـ Backend.
في هذا المقال، سننتقل بك من مجرد فهم شكل الواجهة (Frontend) إلى فهم ما يدور خلف الكواليس. سنتعرف على الـ Backend، ونتعلم كيفية استخدام Node.js و Express لبناء Server و REST API و CRUD Operations، وصولاً لعمل نظام Login وربطه بالـ Frontend.
⚡ الإجابة السريعة: يعني إيه Backend؟
Backend (الجزء الخلفي) هو الجزء الخفي من أي تطبيق أو موقع. هو المسؤول عن معالجة طلبات المستخدمين (Requests)، تطبيق منطق العمل (Business Logic)، التحدث مع قواعد البيانات لحفظ وجلب المعلومات، والتحقق من هوية المستخدمين (Authentication)، ثم إعادة النتائج (Responses) للواجهة الأمامية (Frontend) ليتم عرضها.
الدورة المبسطة: Frontend → Request → Backend → Database → Backend → Response → Frontend.
1. يعني إيه Backend؟
ما هو Backend في برمجة الويب؟
Backend هو "محرك" التطبيق. يتكون من الخادم (Server)، التطبيق نفسه (Business Logic)، وقاعدة البيانات (Database). لا يراه المستخدم مباشرة، ولكنه المسؤول عن معالجة البيانات، التحقق من كلمات المرور، وإرسال المعلومات للـ Frontend.
مخطط توضيحي للعملية:
المستخدم (يضغط على زر "عرض الملف")
⬇️
الـ Frontend (يرسل طلب API Request)
⬇️
الـ Backend (يستقبل الطلب ويتحقق من الصلاحيات)
⬇️
الـ Database (يبحث الـ Backend عن الملف فيها)
⬇️
الـ Backend (يسترجع الملف ويجهزه في شكل API Response)
⬇️
الـ Frontend (يستقبل الرد ويعرض الملف للمستخدم)
مقارنة: Frontend ضد Backend
| المعيار | Frontend (واجهة المستخدم) | Backend (الجزء الخلفي) |
|---|---|---|
| المسؤولية | ما يراه المستخدم ويتفاعل معه (UI/UX) | منطق التطبيق وقواعد البيانات ومعالجة الطلبات |
| أين يعمل؟ | داخل متصفح المستخدم (Client-Side) | على خوادم الشركة (Server-Side) |
| التقنيات | HTML, CSS, JS, React, Vue, Angular | Node.js, PHP, Python, Java, Databases |
2. يعني إيه Node.js؟
ما هو Node.js؟ وهل هو لغة برمجة؟
Node.js ليس لغة برمجة وليس إطار عمل (Framework). هو عبارة عن "بيئة تشغيل" (JavaScript Runtime) تسمح لك بتشغيل لغة JavaScript على الخوادم (Servers) خارج المتصفح.
قديماً كانت JavaScript تعمل فقط داخل المتصفح لإضافة تأثيرات للواجهة. بفضل Node.js، أصبح بإمكانك استخدام نفس لغة JS لكتابة أكواد الـ Backend والتواصل مع قواعد البيانات.
JavaScript + Node.js Runtime = إمكانية بناء خوادم وبرمجيات خارج المتصفح
أشهر استخدامات Node.js:
- بناء REST APIs السريعة للتطبيقات.
- التطبيقات اللحظية (Real-Time Applications) مثل تطبيقات الشات (باستخدام Socket.io).
- تطبيقات الـ Single Page Applications (SPA) بالتعاون مع React و Angular.
- أدوات سطر الأوامر (CLI Tools).
3. Node.js ولا PHP؟
أيهما أفضل لبناء Backend: Node.js أم PHP؟
كلاهما ممتاز ولكل منهما استخداماته. Node.js تستخدم JavaScript، تتميز بالسرعة الشديدة في التطبيقات اللحظية والتكامل السهل مع مطوري الـ Frontend. بينما PHP لغة عريقة تمتلك Ecosystem ضخم لتطوير الويب ومدعومة من استضافات كثيرة وتُستخدم بقوة في أنظمة مثل WordPress أو أطر عمل ضخمة مثل Laravel.
| الميزة | Node.js | PHP |
|---|---|---|
| اللغة المستخدمة | JavaScript / TypeScript | لغة PHP |
| نظام العمل (Runtime) | Asynchronous (تتعامل مع طلبات كثيرة في نفس اللحظة) | Synchronous (تعالج طلباً تلو الآخر غالباً) |
| الـ Ecosystem | NPM (أكبر مكتبة حزم في العالم) | Composer & Laravel & WordPress |
| أفضل استخدام | تطبيقات الـ Real-Time و الـ APIs الخفيفة وتطبيقات الـ JS الشاملة | مواقع الويب التقليدية والمحتوى والتطبيقات الضخمة المنظمة بـ Laravel |
| الاستضافة (Hosting) | تحتاج استضافات تدعم Node (مثل VPS أو Vercel/Render) | مدعومة في أي استضافة مشتركة (Shared Hosting) بسهولة |
💡 الخلاصة: إذا كنت تعرف JavaScript (من الـ Frontend)، فإن Node.js هو المسار الطبيعي والأسرع لك كـ Full-Stack Developer.
4. يعني إيه Express.js؟
ما هو Express.js ولماذا نستخدمه مع Node.js؟
Express.js هو إطار عمل (Framework) خفيف وسريع مبني فوق Node.js. يسهل عليك عملية بناء خوادم الويب والـ APIs وإدارة المسارات (Routing) بطريقة أبسط بكثير من استخدام أدوات Node.js الأصلية المدمجة.
لو Node.js هو المحرك، فـ Express.js هو الدركسيون وأدوات التحكم اللي بتسهل عليك القيادة وتنظيم الكود والـ Requests والـ Responses والـ Middleware.
5. إزاي أعمل Server باستخدام Node.js وExpress؟
خطوات بناء خادم (Server) بسيط جداً من الصفر:
1. قم بإنشاء مجلد جديد للمشروع وقم بتهيئته:
npm init -y
2. قم بتثبيت إطار عمل Express:
npm install express
3. أنشئ ملفاً باسم server.js واكتب هذا الكود:
const express = require("express");
// تهيئة التطبيق
const app = express();
// إنشاء مسار بسيط
app.get("/", (req, res) => {
res.send("Hello Backend!");
});
// تشغيل السيرفر على البورت 3000
app.listen(3000, () => {
console.log("Server is running on http://localhost:3000");
});
شرح الكود:
express(): لإنشاء نسخة من التطبيق.app.get(): للاستماع لأي طلب من نوع GET يأتي على المسار الرئيسي/.req: الـ Request (الطلب الذي أرسله المستخدم، مثل بياناته).res: الـ Response (الرد الذي سيرسله الخادم، مثل النص "Hello Backend!").app.listen(3000): يخبر الخادم بأن يظل في وضع الاستماع للطلبات على المنفذ (Port) رقم 3000.
لتشغيله، اكتب في الـ Terminal: node server.js وافتح المتصفح على http://localhost:3000.
6. إزاي أعمل REST API؟
ما هو REST API؟
الـ API هو وسيلة تواصل بين نظامين (مثل Frontend و Backend). كلمة REST هي مجموعة قواعد لترتيب هذا التواصل. يعتمد على استخدام طرق (HTTP Methods) محددة لكل عملية، ويقوم عادةً بتبادل البيانات بصيغة JSON.
أهم الـ HTTP Methods في REST API:
- GET: لجلب البيانات (قراءة).
- POST: لإنشاء بيانات جديدة (مثلاً: تسجيل مستخدم جديد).
- PUT / PATCH: لتحديث أو تعديل بيانات موجودة.
- DELETE: لحذف بيانات.
مثال لتصميم مسارات (Endpoints) للـ API:
GET /api/users // جلب قائمة كل المستخدمين
GET /api/users/1 // جلب تفاصيل المستخدم رقم 1
POST /api/users // إضافة مستخدم جديد للبيانات
PATCH /api/users/1 // تعديل بعض بيانات المستخدم رقم 1
DELETE /api/users/1 // حذف المستخدم رقم 1
7. يعني إيه CRUD؟
ما معنى اختصار CRUD؟
CRUD هو اختصار للعمليات الأساسية الأربع لأي قاعدة بيانات: Create (إنشاء)، Read (قراءة)، Update (تحديث)، Delete (حذف). أي تطبيق تقريباً يعتمد بشكل أساسي على هذه العمليات.
كيف ترتبط الـ CRUD بالـ HTTP Methods؟
| عملية CRUD | المعنى | الـ HTTP Method المقابل لها |
|---|---|---|
| Create | إضافة سجل جديد (مقال، مستخدم) | POST |
| Read | قراءة السجلات أو عرضها | GET |
| Update | تعديل سجل موجود | PUT أو PATCH |
| Delete | حذف سجل | DELETE |
8. إزاي أعمل Login وRegister؟
بناء نظام تسجيل الدخول ليس مجرد مطابقة اسم وباسورد. هناك هندسة (Architecture) أمنية يجب اتباعها.
دورة الـ Register (إنشاء حساب جديد):
- المستخدم يملأ الفورم (Frontend) ويرسل بياناته بطلب
POST /register. - الـ Backend يتأكد أولاً أن البيانات صحيحة والإيميل غير مستخدم (Validation).
- الـ Backend يقوم بتشفير الباسورد (Password Hashing) باستخدام مكتبات مثل
bcrypt، لا نخزن الباسورد كنص صريح أبداً! - يتم حفظ البيانات المشفرة في الـ Database ويرد الـ Backend برسالة "تم بنجاح".
دورة الـ Login (تسجيل الدخول):
- المستخدم يرسل إيميل وباسورد بطلب
POST /login. - الـ Backend يبحث عن الإيميل في الـ Database.
- الـ Backend يقارن الباسورد المدخل بالباسورد المُشفر المخزن لديه.
- إذا كانا متطابقين، يقوم الـ Backend بإنشاء Session أو Token (مثل JWT) وإرساله للـ Frontend كدليل على صحة هوية المستخدم.
⚠️ لا تعتمد أبداً على الـ Frontend وحده للتحقق من أمان النظام (Security).
9. إزاي أعمل Authentication؟
ما هو الـ Authentication؟
Authentication هي عملية التحقق من هوية المستخدم. باختصار، الإجابة على سؤال: "هل أنت حقاً الشخص الذي تدعي أنك هو؟".
نُطبق الـ Authentication عبر عدة طرق، أشهرها:
- الجلسات (Sessions & Cookies): كان الأسلوب الشائع قديماً، حيث يحتفظ الخادم بسجل للمسجلين في الذاكرة ويربطهم بـ Cookie في المتصفح.
- الرموز (Tokens - JWT): هو الأسلوب الأحدث والأكثر توافقاً مع تطبيقات React/Vue والـ REST APIs الحديثة (Stateless).
10. الفرق بين Authentication وAuthorization
ما الفرق بين Authentication و Authorization؟
Authentication هو التحقق من "هويتك" (من أنت؟ كعملية تسجيل الدخول). بينما Authorization هو تحديد "صلاحياتك" (ماذا يُسمح لك بفعله؟ كالسماح للمدير بحذف مقال بينما يُمنع المستخدم العادي).
| Authentication (AuthN) | Authorization (AuthZ) |
|---|---|
| التحقق من هوية المستخدم | تحديد صلاحيات المستخدم وأذوناته |
| يجيب على: "من أنت؟" | يجيب على: "ماذا يُسمح لك بفعله؟" |
| مثال: إدخال الإيميل والباسورد بنجاح (Login). | مثال: حظر مستخدم عادي من الدخول للوحة تحكم المدير (Admin Dashboard). |
| يتم قبل الـ Authorization | يحدث بعد تأكيد هوية المستخدم |
11. يعني إيه JWT؟
ما هو JWT (JSON Web Token)؟
هو معيار (طريقة) آمن ومضغوط لإرسال معلومات (Token) بين طرفين على هيئة كائن JSON. يُستخدم بكثرة للـ Authentication لتأكيد تسجيل دخول المستخدم في الـ APIs دون الحاجة لحفظ جلسة (Session) على الخادم.
مخطط عمل الـ JWT:
1. تسجيل الدخول ببيانات صحيحة.
2. السيرفر يصنع Token (JWT) ويوقع عليه بمفتاح سري ويرسله لك.
3. يقوم الـ Frontend بحفظ هذا الـ Token.
4. في أي طلب لاحق لبيانات خاصة، يرسل الـ Frontend الـ Token مع الطلب.
5. يتأكد السيرفر من صحة التوقيع على الـ Token، وإذا كان سليماً، يسمح بالعملية.
⚠️ تحذير هام: الـ JWT ليس "مُشفراً" بالكامل، بل هو "مُوقع" لضمان عدم تلاعبه. الجزء المسمى (Payload) بداخله يمكن لأي شخص قراءته بسهولة. لذا، لا تضع أبداً الباسوردات أو معلومات حساسة داخل الـ Token! ضع فقط المعرف (ID) والصلاحية (Role).
12. إزاي أربط Backend بالFrontend؟
الربط يتم عن طريق إرسال HTTP Requests من الـ Frontend (مثل React) إلى عنوان الـ Backend API URL واستقبال الـ JSON.
مثال باستخدام fetch() في الـ Frontend:
// كود داخل مشروع React أو JavaScript عادي
fetch("http://localhost:3000/api/users")
.then(response => {
// التحقق من حالة الرد
if (!response.ok) {
throw new Error("حدث خطأ في الشبكة");
}
return response.json(); // تحويل الرد إلى JSON
})
.then(data => {
console.log(data); // هنا البيانات القادمة من الـ Backend
// يمكنك حفظها في الـ State لعرضها للمستخدم
})
.catch(error => console.error("Error:", error));
أشياء ستواجهها عند الربط:
- مشكلة CORS (Cross-Origin Resource Sharing): ستحدث عندما يحاول Frontend يعمل على
localhost:3000التحدث مع Backend علىlocalhost:5000. يجب تفعيل مكتبةcorsفي الـ Backend للسماح للواجهة بالاتصال به. - Loading State: يجب وضع مؤشر تحميل (Spinner) في الواجهة أثناء انتظار الرد من الخادم.
- Error Handling: معالجة الأخطاء (مثل تعطل الخادم) وإظهار رسالة لطيفة للمستخدم بدلاً من انهيار الواجهة.
13. HTTP Status Codes التي يجب أن تعرفها
عندما يرد الـ Backend، يُرسل رقم يسمى Status Code ليخبر الواجهة بحالة الطلب.
| Status Code | الاسم | المعنى والتوضيح |
|---|---|---|
200 | OK | الطلب نجح وتم إرسال البيانات (في الـ GET والـ PUT). |
201 | Created | الطلب نجح وتم إنشاء مورد جديد (في الـ POST، مثل تسجيل مستخدم جديد). |
400 | Bad Request | الطلب غير صحيح (مثلاً: أرسلت إيميل بدون باسورد، أو بصيغة خاطئة). |
401 | Unauthorized | يحتاج المستخدم لـ Authentication (لم يسجل دخول، أو الـ Token منتهي). |
403 | Forbidden | المستخدم مسجل دخول لكن ليس لديه صلاحية (Authorization) لهذا الفعل. |
404 | Not Found | الرابط أو العنصر المطلوب (مثلاً مستخدم محدد) غير موجود. |
409 | Conflict | تعارض (مثلاً محاولة تسجيل حساب بإيميل مسجل مسبقاً). |
500 | Internal Server Error | خطأ برمجي كارثي داخل كود الـ Backend نفسه، وليس خطأ من المستخدم. |
14. إزاي أرفع Backend Online؟
رفع الـ Backend أصعب قليلاً من واجهات المواقع الثابتة؛ لأنه يحتاج إلى بيئة تشغيل (Server) تعمل على مدار الساعة وتستطيع الاتصال بقاعدة البيانات.
الخطوات العامة للـ Deployment:
- تأكد من تشغيل المشروع ونجاحه محلياً (Local).
- قم برفع الكود الخاص بالـ Backend على GitHub.
- اختر منصة استضافة تدعم Node.js (مثل Render, Railway, DigitalOcean App Platform، أو VPS).
- قم بربط الـ Repository الخاص بك بالمنصة.
- حدد الـ Build Command (إن وُجد) والـ Start Command (غالباً
node server.jsأوnpm start). - قم بإضافة Environment Variables في لوحة تحكم المنصة (القسم التالي يشرحها).
- اضغط Deploy، واحتفظ بالـ URL الجديد للـ API.
- في الـ Frontend، قم بتغيير روابط
fetch()منlocalhostإلى الرابط الجديد الذي حصلت عليه.
15. يعني إيه Environment Variables؟
ما هي Environment Variables (.env) ولماذا تُستخدم؟
هي متغيرات البيئة، تُستخدم لتخزين الإعدادات الحساسة الخاصة بتشغيل التطبيق مثل كلمات مرور قاعدة البيانات، والـ Secret Keys الخاصة بالـ JWT بعيداً عن الكود المصدري لمنع تسريبها.
لا يجب أبداً، بأي حال من الأحوال، كتابة كلمات السر أو روابط قواعد البيانات الحقيقية مكشوفة في كود الخادم ورفعه على GitHub. أي شخص يمكنه رؤيتها وسرقة بياناتك.
مثال لملف .env مخفي محلياً:
PORT=3000
DATABASE_URL=mongodb+srv://admin:[email protected]/mydb
JWT_SECRET=super_secret_key_12345!
في كود الـ Node.js، نصل إليها عن طريق process.env.DATABASE_URL.
عند رفع الكود لـ GitHub، نتأكد من وضع ملف .env داخل ملف .gitignore حتى لا يتم رفعه. ثم نضع هذه المتغيرات في لوحة تحكم منصة الـ Hosting يدوياً.
مشروع Backend للمبتدئين: User Management API
لبناء خبرة حقيقية، قم بإنشاء مشروع كامل كالتالي:
تفاصيل المشروع:
- التكنولوجيا: Node.js, Express, MongoDB (عبر Mongoose).
- Auth System: تطبيق Login و Register مع تشفير الباسوردات وإنتاج JWT.
- CRUD: إضافة، قراءة، تعديل، وحذف بيانات المستخدمين.
- Protected Routes: مسارات لا يمكن للمستخدم العادي دخولها إلا بالـ Token الصحيح.
- Roles: ميزة الـ Admin الذي يحق له وحده حذف مستخدمين (Authorization).
هيكلة مجلدات المشروع (Architecture) المقترحة:
src/
├── config/ # إعدادات الاتصال بقاعدة البيانات
├── models/ # تصميم البيانات (مثل جدول المستخدم User Schema)
├── controllers/ # العمليات البرمجية (المنطق) الخاصة بكل مسار
├── routes/ # تعريف مسارات الـ API وربطها بالـ Controllers
├── middleware/ # فحص الـ Tokens أو التحقق من البيانات قبل وصولها للـ Controller
└── app.js # نقطة انطلاق السيرفر الأساسية
التقسيم الجيد (Architecture) يجعل مشروعك قابلاً للصيانة وإضافة ميزات جديدة دون فوضى.
أهم قواعد الأمان (Security) التي يجب أن تعرفها
الـ Backend هو حائط الصد الأساسي لأمان التطبيق. كمبتدئ، تذكر هذه القواعد دائماً:
- لا تخزن كلمات المرور كنص صريح: استخدم مكتبة مثل
bcryptلعمل Hashing. - أخفِ أسرارك: استخدم الـ Environment Variables (ملف .env) لكل ما هو سري وتأكد أنه لا يُرفع على GitHub.
- تحقق من المدخلات (Validate Input): لا تثق أبداً في البيانات القادمة من الـ Frontend. إذا كنت تتوقع رقماً وتلقيت نصاً، ارفض الطلب لحماية قاعدة البيانات من الثغرات.
- لا ترسل أخطاء السيرفر التفصيلية (Stack Trace) للمستخدم: في مرحلة الـ Production، أرسل رسالة خطأ عامة مثل "خطأ داخلي" حتى لا تكشف تفاصيل بنية خادمك للـ Hackers.
- استخدم HTTPS: لتشفير البيانات المنتقلة بين المتصفح والخادم حتى لا يتم اعتراضها.
ماذا أتعلم بعد Backend؟ (Roadmap)
مسار تعلم Backend المنطقي خطوة بخطوة:
JavaScript & ES6+ (أساسيات)
⬇️
Node.js Basics & NPM
⬇️
Express.js & HTTP Methods
⬇️
RESTful APIs Concepts & CRUD
⬇️
Databases (SQL & NoSQL مثل MongoDB)
⬇️
Authentication & Authorization (JWT)
⬇️
Error Handling & Data Validation
⬇️
Security Basics & Environment Variables
⬇️
Git, GitHub & Deployment
⬇️
TypeScript in Node.js (المستوى الاحترافي)
⬇️
Docker & Microservices (للمشاريع الضخمة لاحقاً)
الأسئلة الشائعة (FAQ)
هل الـ Backend صعب؟
ليس صعباً إذا تعلمته خطوة بخطوة، ولكنه يحتاج تفكيراً منطقياً أكثر من التفكير البصري الخاص بالـ Frontend. ستتعامل مع بيانات، قواعد أمان، ومنطق أعمال.
هل Node.js لغة برمجة؟
لا، Node.js هي بيئة تشغيل تُشغّل لغة JavaScript خارج المتصفح وعلى أجهزة الخوادم.
ما هو الـ CRUD؟
هو اختصار للعمليات الأربع لأي تطبيق متصل بقاعدة بيانات: الإنشاء (Create)، القراءة (Read)، التحديث (Update)، والحذف (Delete).
هل JWT آمن؟
آمن جداً من حيث التلاعب (لأنه موقع بمفتاح سري لا يملكه سوى الخادم)، لكنه ليس مشفراً لمنع القراءة. أي بيانات تضعها بداخله يمكن قراءتها، لذلك نضع فيه فقط الـ ID الخاص بالمستخدم.
ما هو CORS Error في المتصفح؟
هو خطأ أمني يفرضه المتصفح عندما يطلب موقع (Frontend) على نطاق معين بيانات من خادم (Backend API) موجود على نطاق آخر، ولم يعطِ الخادم تصريحاً لهذا الموقع بالوصول للبيانات. يُحل عبر إضافة حزمة cors في Node.js.
هل أحتاج قاعدة بيانات لتعلم الـ Backend؟
في البداية يمكنك التدرب باستخدام بيانات ثابتة (Arrays) في الذاكرة، لكن التطبيقات الحقيقية مستحيلة بدون قاعدة بيانات. يجب أن تتعلم MongoDB أو MySQL بعد فهم أساسيات Express.
🚀 جاهز تبني أنظمة متكاملة وتصبح Full-Stack Developer؟
لو وصلت لمرحلة إنك فاهم Front-End وعايز تبدأ تبني أنظمة ومواقع حقيقية فيها قواعد بيانات وLogin System وAPI خاص بيك، فالخطوة التالية هي تعلم Backend بشكل عملي ومنظم.
لو محتار تبدأ من Node.js ولا تتعلم Databases الأول، ولا إزاي تعمل Authentication بشكل آمن وتفهم الـ JWT صح.
فريق Syntax Room معاك. تواصل معنا لمعرفة المسار المناسب لمستواك، وابدأ رحلتك للـ Backend بأساس سليم.
احجز استشارتك الآن