بناء أول خادم ويب (Web Server) باستخدام وحدة http المدمجة


بناء أول خادم ويب (Web Server) باستخدام وحدة http المدمجة

مرحباً أيها المطورون! اليوم سنتعلم كيفية بناء خادم ويب بسيط وفعال باستخدام وحدة http المدمجة في Node.js، خطوة بخطوة.

1. استيراد وحدة http وإنشاء الخادم

الخطوة الأولى هي استيراد وحدة http في Node.js، وهي الوحدة المسؤولة عن التعامل مع بروتوكول HTTP. بعد ذلك، سنقوم بإنشاء خادم باستخدام الدالة http.createServer() التي تقبل دالة رد نداء (callback function) يتم استدعاؤها في كل مرة يتلقى فيها الخادم طلباً جديداً.

const http = require('http'); // استيراد وحدة http المدمجة في Node.js

// إنشاء خادم HTTP. الدالة التي تمرر هنا ستنفذ لكل طلب وارد.
const server = http.createServer((req, res) => {
    // 'req' (request) هو كائن يمثل الطلب الوارد من العميل.
    // 'res' (response) هو كائن يمثل الاستجابة التي سنرسلها للعميل.
    // هنا سيتم التعامل مع الطلبات والاستجابات في الخطوات التالية.
});

ملاحظة تقنية: الكائن req يحتوي على معلومات مثل URL الخاص بالطلب، طريقة HTTP (GET, POST, إلخ)، ورؤوس الطلب (headers). الكائن res يستخدم لإرسال البيانات، تعيين رؤوس الاستجابة، ورمز الحالة.

2. التعامل مع الطلبات (Requests) والاستجابات (Responses)

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

const http = require('http'); // استيراد وحدة http المدمجة في Node.js

const server = http.createServer((req, res) => {
    // تعيين رمز الحالة (Status Code) للاستجابة إلى 200 (OK) للدلالة على نجاح الطلب.
    res.statusCode = 200;

    // تعيين نوع المحتوى (Content-Type) للاستجابة إلى نص/عادي (plain text).
    // هذا يخبر المتصفح بكيفية تفسير البيانات المرسلة.
    res.setHeader('Content-Type', 'text/plain; charset=utf-8');

    // إرسال نص "مرحباً أيها العالم من خادم Node.js!" كاستجابة وإنهاء الاتصال.
    // الدالة res.end() يجب أن تستدعى لإنهاء دورة الطلب/الاستجابة.
    res.end('مرحباً أيها العالم من خادم Node.js!\n');
});

3. تشغيل الخادم والاستماع إلى الطلبات

بعد تعريف كيفية استجابة الخادم، نحتاج إلى تشغيله وجعله يستمع إلى الطلبات على منفذ وعنوان IP محددين. نستخدم الدالة server.listen() لهذا الغرض.

const http = require('http'); // استيراد وحدة http المدمجة في Node.js

const hostname = '127.0.0.1'; // عنوان IP الذي سيستمع إليه الخادم (عادةً 'localhost')
const port = 3000;           // المنفذ الذي سيستمع إليه الخادم. يمكن أن يكون أي منفذ متاح (مثل 8080، 5000).

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain; charset=utf-8');
    res.end('مرحباً أيها العالم من خادم Node.js!\n');
});

// تشغيل الخادم والاستماع إلى الطلبات على المنفذ والعنوان المحدد.
// الدالة الثالثة هي دالة رد نداء يتم استدعاؤها بمجرد بدء تشغيل الخادم بنجاح.
server.listen(port, hostname, () => {
    console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">الخادم يعمل على http://${hostname}:${port}/</code>);
});

ملاحظة تقنية: استخدام 127.0.0.1 (localhost) يعني أن الخادم سيكون متاحًا فقط من جهازك المحلي. لتجعله متاحًا من أجهزة أخرى على نفس الشبكة، قد تحتاج إلى استخدام 0.0.0.0 أو عنوان IP الخاص بجهازك.

الكود النهائي الكامل

هذا هو السكربت كاملاً وجاهزاً للتشغيل:

const http = require('http'); // استيراد وحدة http المدمجة في Node.js

const hostname = '127.0.0.1'; // عنوان IP الذي سيستمع إليه الخادم (localhost)
const port = 3000;           // المنفذ الذي سيستمع إليه الخادم

// إنشاء خادم HTTP
const server = http.createServer((req, res) => {
    // تعيين رمز الحالة (Status Code) للاستجابة إلى 200 (OK)
    res.statusCode = 200;

    // تعيين نوع المحتوى (Content-Type) للاستجابة إلى نص/عادي (plain text)
    res.setHeader('Content-Type', 'text/plain; charset=utf-8');

    // إرسال نص "مرحباً أيها العالم من خادم Node.js!" كاستجابة وإنهاء الاتصال
    res.end('مرحباً أيها العالم من خادم Node.js!\n');
});

// تشغيل الخادم والاستماع إلى الطلبات على المنفذ والعنوان المحدد
server.listen(port, hostname, () => {
    // طباعة رسالة في الكونسول عند بدء تشغيل الخادم بنجاح
    console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">الخادم يعمل على http://${hostname}:${port}/</code>);
});

النتيجة المتوقعة

لتشغيل هذا الخادم:

  1. احفظ الكود أعلاه في ملف باسم server.js (أو أي اسم تفضله).
  2. افتح سطر الأوامر (Terminal/Command Prompt) وانتقل إلى المجلد الذي حفظت فيه الملف.
  3. نفذ الأمر التالي: node server.js

ستشاهد في سطر الأوامر الرسالة التالية:

الخادم يعمل على http://127.0.0.1:3000/

الآن، افتح متصفح الويب الخاص بك وانتقل إلى العنوان http://127.0.0.1:3000/. سترى النص التالي معروضاً في المتصفح:

مرحباً أيها العالم من خادم Node.js!

تهانينا، لقد قمت ببناء وتشغيل أول خادم ويب لك باستخدام Node.js!