مقدمة إلى Node.js
Node.js هي بيئة تشغيل جافا سكريبت مفتوحة المصدر ومتعددة المنصات. إنها أداة شائعة الاستخدام تقريبًا في أي نوع من المشاريع!
يقوم Node.js بتشغيل محرك جافا سكريبت V8، جوهر جوجل كروم، خارج المتصفح. هذا يسمح لـ Node.js بأن يكون عالي الأداء.
يعمل تطبيق Node.js في عملية واحدة، دون إنشاء مؤشر ترابط جديد لكل طلب. يوفر Node.js مجموعة من بدائيات الإدخال/الإخراج غير المتزامنة في مكتبة معيارية تمنع تعليق كود جافا سكريبت، وعمومًا، يتم كتابة المكتبات في Node.js باستخدام نماذج غير مُعَطِّلة، مما يجعل السلوك المُعَطِّل استثناءً وليس القاعدة.
عندما يقوم Node.js بعملية إدخال/إخراج، مثل القراءة من الشبكة، أو الوصول إلى قاعدة بيانات أو نظام الملفات، بدلاً من حظر المؤشر الترابط وإضاعة دورات وحدة المعالجة المركزية في الانتظار، سيستأنف Node.js العمليات عند عودة الاستجابة.
هذا يسمح لـ Node.js بمعالجة آلاف الاتصالات المتزامنة بخادم واحد دون إدخال عبء إدارة تزامن المؤشرات الترابط، والتي يمكن أن تكون مصدرًا مهمًا للأخطاء.
يمتلك Node.js ميزة فريدة لأن ملايين مطوري الواجهة الأمامية الذين يكتبون جافا سكريبت للمتصفح أصبح بإمكانهم الآن كتابة كود الخادم بالإضافة إلى كود العميل دون الحاجة إلى تعلم لغة مختلفة تمامًا.
في Node.js، يمكن استخدام معايير ECMAScript الجديدة دون مشاكل، حيث لا يتعين عليك الانتظار حتى يقوم جميع مستخدميك بتحديث متصفحاتهم - أنت المسؤول عن تحديد إصدار ECMAScript الذي سيتم استخدامه عن طريق تغيير إصدار Node.js، ويمكنك أيضًا تمكين ميزات تجريبية محددة عن طريق تشغيل Node.js باستخدام علامات.
مثال على تطبيق Node.js
أكثر الأمثلة شيوعًا لبرنامج Hello World في Node.js هو خادم ويب:
import { createServer } from 'node:http'
const hostname = '127.0.0.1'
const port = 3000
const server = createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('Hello World')
})
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`)
})
لتشغيل هذا المقطع، احفظه كملف server.js
وشغل node server.js
في محطتك الطرفية. إذا كنت تستخدم إصدار mjs من التعليمات البرمجية، فيجب عليك حفظه كملف server.mjs
وتشغيل node server.mjs
في محطتك الطرفية.
يقوم هذا الكود أولاً بتضمين وحدة http من Node.js.
يحتوي Node.js على مكتبة معيارية رائعة، بما في ذلك دعم من الدرجة الأولى للشبكات.
يقوم أسلوب createServer()
لـ http
بإنشاء خادم HTTP جديد وإرجاعه.
تم ضبط الخادم للاستماع على منفذ واسم مضيف محددين. عندما يكون الخادم جاهزًا، يتم استدعاء دالة المُراجَع، وفي هذه الحالة تُبلغنا بأن الخادم يعمل.
عندما يتم استقبال طلب جديد، يتم استدعاء حدث الطلب، ويوفر كائنين: طلب (كائن http.IncomingMessage
) واستجابة (كائن http.ServerResponse
).
هذان الكائنان أساسيان للتعامل مع مكالمة HTTP.
يوفر الأول تفاصيل الطلب. في هذا المثال البسيط، لا يتم استخدام هذا، ولكن يمكنك الوصول إلى رؤوس الطلب وبيانات الطلب.
يتم استخدام الثاني لإرجاع البيانات إلى المُستدعي.
في هذه الحالة مع:
res.setHeader('Content-Type', 'text/plain')
نقوم بتعيين خاصية statusCode إلى 200، للإشارة إلى استجابة ناجحة.
نقوم بتعيين رأس Content-Type:
res.setHeader('Content-Type', 'text/plain')
ونقوم بإغلاق الاستجابة، وإضافة المحتوى كوسيطة إلى end()
:
res.end('Hello World')
سيرسل هذا الاستجابة إلى العميل.