Skip to content

مقدمة إلى Node.js

Node.js هي بيئة تشغيل JavaScript مفتوحة المصدر وعبر الأنظمة الأساسية. إنها أداة شائعة لأي نوع من المشاريع تقريبًا!

يقوم Node.js بتشغيل محرك V8 JavaScript، وهو جوهر Google Chrome، خارج المتصفح. هذا يسمح لـ Node.js بأن يكون عالي الأداء للغاية.

يعمل تطبيق Node.js في عملية واحدة، دون إنشاء سلسلة محادثات جديدة لكل طلب. يوفر Node.js مجموعة من بدائيات الإدخال/الإخراج غير المتزامنة في مكتبته القياسية التي تمنع كود JavaScript من الحظر وبشكل عام، تتم كتابة المكتبات في Node.js باستخدام نماذج غير حظر، مما يجعل سلوك الحظر هو الاستثناء وليس القاعدة.

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

هذا يسمح لـ Node.js بالتعامل مع آلاف الاتصالات المتزامنة بخادم واحد دون إدخال عبء إدارة تزامن سلسلة المحادثات، والذي قد يكون مصدرًا مهمًا للأخطاء.

يتمتع Node.js بميزة فريدة لأن ملايين مطوري الواجهة الأمامية الذين يكتبون JavaScript للمتصفح قادرون الآن على كتابة كود جانب الخادم بالإضافة إلى كود جانب العميل دون الحاجة إلى تعلم لغة مختلفة تمامًا.

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

مثال على تطبيق Node.js

المثال الأكثر شيوعًا لبرنامج Hello World لـ Node.js هو خادم الويب:

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.

يوفر الأول تفاصيل الطلب. في هذا المثال البسيط، لا يتم استخدام هذا، ولكن يمكنك الوصول إلى رؤوس الطلب وبيانات الطلب.

يستخدم الثاني لإرجاع البيانات إلى المتصل.

في هذه الحالة مع:

js
res.setHeader('Content-Type', 'text/plain')

نقوم بتعيين خاصية statusCode على 200 للإشارة إلى استجابة ناجحة.

نقوم بتعيين رأس Content-Type:

js
res.setHeader('Content-Type', 'text/plain')

ونغلق الاستجابة، مع إضافة المحتوى كوسيطة إلى end():

js
res.end('Hello World')

سيؤدي ذلك إلى إرسال الاستجابة إلى العميل.