أنشئ خادم ويب HTTP في Node.js باستخدام Code مثال
⚡ ملخص ذكي
يُتيح Node.js إنشاء خادم ويب جاهز للعمل في بضعة أسطر باستخدام وحدة http المدمجة. يستمع الخادم على منفذ مُحدد ويُجيب على كل طلب برمز حالة ومحتوى، بينما يقوم كود منفصل بجلب البيانات من مواقع أخرى.

استخدم Node.js يُستخدم هذا الإطار في الغالب لإنشاء تطبيقات تعتمد على الخادم. ويمكن استخدامه بسهولة لبناء خوادم ويب تُقدّم المحتوى للمستخدمين.
تتولى عدة وحدات معالجة الطلبات المتعلقة بالخادم، وهي مدمجة http الوحدة النمطية هي الأهم. سنتناول كيفية إنشاء تطبيق خادم ويب أساسي باستخدام Node.js، ثم كيفية طلب البيانات من موقع آخر.
عقدة كخادم ويب باستخدام HTTP
دعونا نلقي نظرة على مثال لكيفية إنشاء وتشغيل أول تطبيق Node.js.
يقوم التطبيق بإنشاء وحدة خادم بسيطة تستمع على المنفذ 7000. عندما يتم إرسال طلب عبر المتصفح على هذا المنفذ، يرسل الخادم مرحبا يا عالم الرد على العميل.
Code تفسير
- استخدم
requireتقرأ الدالة Javaسيناريو يقوم البرنامج بتحميل الملف، ثم ينفذه، ويعيد كائن التصدير الخاص به. هنا يقوم بتحميلhttpوحدة نمطية بحيث تكون وظائفها متاحة في التطبيق. - يتم إنشاء تطبيق الخادم من دالة بسيطة. يتم تشغيل هذه الدالة في كل مرة يصل فيها طلب إلى الخادم.
- عند استلام الطلب، يتم إرسال الرد بحالة " 200هذا هو رمز الحالة القياسي في رأس HTTP للاستجابة الناجحة.
- نص الاستجابة نفسه هو السلسلة مرحبا يا عالم.
server.listenيجعل التطبيق يستمع لطلبات العميل على المنفذ 7000. يمكن استخدام أي منفذ متاح.
إذا تم تنفيذ الأمر بنجاح، فستظهر المخرجات التالية في المتصفح.
الناتج
من المخرجات:
- تصفح الموقع المحلي URL يعرض المنفذ 7000 السلسلة مرحبا يا عالم في الصفحة.
- لأن الكود يحدد المنفذ 7000، فإن المخرجات لا تظهر إلا عند التصفح إلى ذلك المنفذ.
إليكم الكود للاطلاع عليه:
var http = require('http'); var server = http.createServer(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Hello World\n"); }); server.listen(7000);
التعامل مع طلبات GET في Node.js
يُعدّ إرسال طلب GET لاسترداد البيانات من موقع آخر أمرًا بسيطًا في Node.js. تاريخيًا، كان هذا يتطلب request الوحدة النمطية، المثبتة من سطر الأوامر:
npm install request
يطلب هذا الأمر من مدير حزم Node تنزيل الوحدة المطلوبة وتثبيتها. عند نجاح التثبيت، يعرض سطر الأوامر اسم الوحدة المثبتة وإصدارها بالشكل التالي: <name>@<version>.
في اللقطة أعلاه، request تم تنزيل الوحدة ورقم إصدارها وتثبيتها.
Code تفسير
- استخدم
requestتوفر الوحدة المثبتة في الخطوة السابقة الوظائف اللازمة لإجراء طلبات GET إلى مواقع الويب. - يتم إرسال طلب GET إلى الموقع، ويتم تشغيل دالة رد نداء بمجرد وصول الاستجابة. تستقبل دالة رد النداء ثلاثة معلمات:
- خطأ — يسجل أي خطأ يظهر أثناء تقديم الطلب.
- استجابة — يحمل رؤوس HTTP التي يتم إرجاعها مع الاستجابة.
- الجسد — يحتوي على كامل محتوى الرد.
- المحتوى الوارد في
bodyيتم كتابة المعامل إلى وحدة التحكم.
إليكم الكود للاطلاع عليه:
var request = require("request"); request("https://example.com", function(error, response, body) { // Always check the error parameter before using the body if (error) { console.error("Request failed:", error.message); return; } console.log(body); });
⚠️ إشعار بالتوقف عن الاستخدام: القادم request كانت الوحدة تم إيقاف دعمه بالكامل في فبراير 2020 ولا يتلقى أي تحديثات أخرى. لا يزال يتم تثبيته وتشغيله، لذا يظل المثال أعلاه صالحًا للمشاريع الحالية، ولكن npm install request يعرض الآن تحذيرًا بشأن الإهمال. يجب أن يستخدم الكود الجديد الخاصية المدمجة. fetch الوظيفة موضحة في القسم التالي.
كيفية إجراء طلبات HTTP باستخدام دالة fetch الأصلية في Node.js
لقد أضافت Node نطاقًا عالميًا fetch هذه الوظيفة متوفرة منذ الإصدار 18، وتتوافق مع واجهة برمجة التطبيقات التي توفرها المتصفحات بالفعل. لا يتطلب الأمر تثبيت أي حزمة، وتعيد الوظيفة وعدًا، لذا فهي تعمل مباشرةً مع async/await.
// No require and no npm install needed on Node 18 or later async function getData() { try { const response = await fetch("https://example.com"); // fetch does NOT reject on 404 or 500 — check ok yourself if (!response.ok) { throw new Error("HTTP status " + response.status); } const body = await response.text(); console.log(body); } catch (err) { // Network failures and the throw above both land here console.error("Request failed:", err.message); } } getData();
هناك ثلاثة اختلافات جديرة بالذكر عن أسلوب الاستدعاء. أولاً، fetch لا يتم رفض الطلبات إلا في حالة حدوث عطل على مستوى الشبكة؛ أما رمز الخطأ HTTP 404 أو 500 فيتم حله بنجاح، ولهذا السبب... response.ok التحقق موجود، ولماذا يُعدّ إغفاله الخطأ الأكثر شيوعًا عند الانتقال من requestثانيًا، لا يتم إرسال نص الرسالة مع الرد، بل يجب قراءته بشكل صريح. response.text() للنص العادي أو response.json() بالنسبة لـ JSON، وكل منها يُعيد وعدًا خاصًا به. ثالثًا، نظرًا لأن الاستدعاء بأكمله قائم على الوعود، فإن واحدًا try/catch يغطي كلاً من الطلب وقراءة نص الاستجابة، ويستبدل معلمة رد الاتصال التي تعالج الخطأ أولاً بشكل كامل.
بالنسبة للبرامج النصية التي يجب تشغيلها على Node 16 أو إصدار أقدم، قم بالتثبيت node-fetch or axios بدلاً من ذلك، حيث أن كليهما يعرض واجهة قائمة على الوعود قابلة للمقارنة ولا يتطلبان سوى تغيير سطر الاستيراد بمجرد ترقية وقت التشغيل.
طلب مقابل جلب مقابل أكسيوس: أيهما تستخدم؟
تظهر ثلاثة عملاء HTTP في معظم مواد Node، وواحد منهم فقط يُعدّ خيارًا افتراضيًا مناسبًا للمشاريع الجديدة. تختلف هذه العملاء في حالة الصيانة، وفي الحاجة إلى الاعتماد على بعضها البعض، وفي كيفية إشارة كل منها إلى حالة الخطأ، لذا يُقارن الجدول أدناه بينها جنبًا إلى جنب.
| البعد | طلب | جلب البيانات (مدمج) | أكسيوس |
|---|---|---|---|
| الحالة | تم إيقاف دعمه منذ عام 2020 | يتم الاحتفاظ بها في النواة | صيانة نشطة |
| التركيب | حزمة npm | لا يوجد على Node 18+ | حزمة npm |
| الطراز | رد نداء أولي للخطأ | وعد | وعد |
| تحليل JSON | يدوي، أو خيار JSON | يدوياً عبر response.json() | أوتوماتيك |
| رفض على 404 أو 500 | لا | لا | نعم |
استعمل fetch بالنسبة للمشاريع الجديدة التي تعمل على إصدار Node الحالي، لأنه لا يضيف أي تبعيات ويتوافق مع واجهة برمجة تطبيقات المتصفح التي يعرفها المطورون بالفعل. اختر axios عندما يؤدي التعامل التلقائي مع بيانات JSON، أو استخدام أدوات اعتراض الطلبات، أو رفض الطلبات عند حدوث أخطاء، إلى توفير جزء كبير من التعليمات البرمجية. احتفظ بها. request فقط داخل التطبيقات القديمة التي تعتمد عليه بالفعل، والتي تخطط لاستبداله.
أخطاء خادم Node.js الشائعة وكيفية إصلاحها
معظم حالات الفشل عند بدء تشغيل خادم Node الأول تأتي من المنافذ أو المسارات أو الاستجابة المفقودة بدلاً من كود الخادم نفسه.
- إيدرينوز: هناك عملية أخرى تستخدم المنفذ بالفعل. قم بتشغيلها
netstat -ano | findstr :7000on Windows أوlsof -i :7000on macOS وإذا كنت تستخدم نظام لينكس، فأوقف تلك العملية أو اختر منفذًا مختلفًا. - EACCES على منفذ منخفض: تتطلب المنافذ الأقل من 1024 صلاحيات إدارية. استخدم منفذًا أعلى من 1024 أثناء التطوير، مثل 3000 أو 7000.
- يتوقف المتصفح عن العمل ولا يتم تحميل الصفحة أبداً: لم يتصل المسؤول أبداً
response.end()يبقى الاتصال مفتوحًا حتى ينتهي وقته، لذلك يجب على كل مسار عبر المعالج إنهاء الاستجابة. - تعذر العثور على الوحدة النمطية 'http': اسم الملف مكتوب بشكل خاطئ، أو أن البرنامج النصي يعمل في متصفح بدلاً من Node. لا تحتاج الوحدات الأساسية إلى تثبيت.
- لا تظهر التغييرات: يقوم Node بتحميل الملف مرة واحدة عند بدء التشغيل. أعد تشغيل العملية بعد كل تعديل، أو قم بتشغيلها تحت مراقبة مثل
node --watch server.js.




