مسرد Node.js من الألف إلى الياء
مسرد Node.js — 115 تعريفًا
- جميع المصطلحات المعرفة في أقسام الدليل الـ23، مرتبة أبجديًا.
- تلميح: Ctrl + F للبحث عن مصطلح في الصفحة.
- .on() / .emit()
- on(حدث، callback): تسجيل مستمع. emit(حدث، بيانات): إطلاق الحدث (تُستدعى كل مستمعاته مع البيانات).
- .once() / .off()
- once(): الاستماع لحدث مرة واحدة فقط (إلغاء اشتراك تلقائي). off()/removeListener(): التوقف عن الاستماع لحدث.
- .pipe()
- يربط تدفق قراءة (readable stream) بتدفق كتابة (writable stream): تتدفق البيانات تلقائيًا من أحدهما إلى الآخر، قطعة قطعة، مع إدارة التدفق.
- «يعمل على جهازي»
- المشكلة التي يحلها دوكر (Docker): التطبيق يعتمد على بيئته وقد يفشل elsewhere؛ الحاوية تحمل بيئتها معها، فتعمل في كل مكان بالطريقة نفسها.
- الاعتماد التدريجي (Adoption progressive)
- يُتعلم TS خطوة بخطوة (تنميط خفيف ثم متقدم)؛ وباعتباره مجموعة عليا من JS، تُعاد استخدام إتقان جافاسكربت — نضيف الأنواع فوقها.
- واجهة + واجهة أمامية منفصلة (API + front séparé / SPA)
- بديل حديث: Node يعرض واجهة REST API (بصيغة JSON) يستهلكها front منفصل (React/Vue/Angular) يدير العرض في المتصفح.
- واجهة REST API
- أسلوب معماري لواجهات الويب: عرض الموارد (روابط واضحة) تُدار بأساليب HTTP حسب دلالتها، وردود بصيغة JSON مع رموز الحالة المناسبة.
- async/await
- صياغة حديثة (سكر فوق الوعود Promises): تنتظر await نتيجة عملية لامتزامنة دون حجب؛ يُقرأ الكود اللامتزامن كأنه متزامن. الأخطاء عبر try/catch.
- اللامتزامن غير الحاجب (Asynchrone non-bloquant)
- نموذج لا تحجب فيه العمليات البطيئة (ملفات، شبكة، قاعدة) البرنامج: تسجل Node دالة راجعة (callback) وتنتقل لشيء آخر أثناء الانتظار.
- لامتزامن مقابل متزامن (Asynchrone vs synchrone / fs)
- يُفضَّل اللامتزامن (غير الحاجب) في الخادم حتى لا يحجب حلقة الأحداث (event loop)؛ والمتزامن (Sync) مخصص للسكربتات والإعداد عند الإقلاع.
- المصادقة مقابل التفويض (Authentification vs autorisation)
- المصادقة: من هو المستخدم (401 إن لم يُصادَق عليه). التفويض: هل له الحق في هذا الفعل (403 إن لم يُؤذَن له).
- قاعدة البيانات / الاستمرارية (Base de données / persistance)
- نظام يحفظ البيانات دائمًا (مستخدمون، منتجات…). عائلتان: NoSQL (مونغو MongoDB) و SQL/علائقية (القسم 3-4).
- فوائد دوكر (Bénéfices de Docker)
- قابلية إعادة الإنتاج (متطابق في كل مكان)، العزل (لا تعارضات)، قابلية النقل (أي مضيف Docker)، سهولة النشر، وانضمام سريع (docker compose up).
- فوائد تايب سكربت (Bénéfices de TypeScript)
- أخطاء تُمسك عند الترجمة، إكمال تلقائي وأدوات متفوقة، توثيق ضمني (الأنواع تصف)، ومتانة وقابلية صيانة في المشاريع الكبيرة.
- فوائد الاختبارات (Bénéfices des tests)
- الثقة (الكود يفعل ما يجب)، منع التراجع (كشف ما يكسره تعديل)، التوثيق (السلوك المتوقع)، وتصميم أفضل (الكود القابل للاختبار = منظم أفضل).
- أفضل ممارسات REST (Bonnes pratiques REST)
- روابط متسقة بصيغة الجمع، أساليب/رموز حالة صحيحة، إدارة أخطاء نظيفة، ترقيم الصفحات (pagination)، إصدار الواجهة (/api/v1/)، ورد JSON منظم.
- حلقة الأحداث (Boucle d'événements / event loop)
- الآلية المركزية التي تنظم التنفيذ: تطلق العمليات البطيئة في الخلفية وتستدعي الدوال عندما تصل النتائج.
- المخزن المؤقت (Buffer)
- منطقة ذاكرة خام من البايتات لمعالجة البيانات الثنائية (ملفات، شبكة)، التي لا تملكها جافاسكربت أصليًا؛ والتدفقات (streams) تنقل غالبًا Buffers.
- الدالة الراجعة (Callback)
- دالة تُمرَّر كوسيط، تُستدعى عندما تنتهي عملية لامتزامنة. اصطلاح Node «الخطأ أولًا (error-first)»: الوسيط الأول = الخطأ (null إن سار كل شيء)، ثم النتيجة.
- جحيم الدوال الراجعة (Callback hell)
- تداخل غير مقروء للدوال الراجعة عند تسلسل عمليات لامتزامنة مترابطة؛ مشكلة تحلها الوعود (Promises) و async/await.
- ما يبسطه إكسبريس (Ce qu'Express simplifie)
- الخادم الأصلي يدير كل شيء يدويًا (توجيه بشروط if، تحليل الجسم، الترويسات)؛ يوفر Express التوجيه والتحليل والوسائط (middlewares) — لكنه مبني على الوحدة http.
- مسار الوحدة (Chemin de module)
- محلي: يبدأ بـ ./ أو ../ (ملفات المشروع). اسم وحده: وحدة أصلية (fs) أو حزمة npm في node_modules (مثل express).
- التكامل/النشر المستمر (CI/CD / GitHub Actions)
- أتمتة المسار من الكود إلى الإنتاج: CI (عند كل دفع، اختبار/تحقق)، CD (نشر تلقائي إذا نجحت التحققات). GitHub Actions ينشئ هذه السلاسل.
- التعنقد (Clustering)
- إطلاق عدة نسخ من التطبيق (واحدة لكل نواة، عبر الوحدة cluster أو PM2) تتقاسم الطلبات؛ يستغل كل النوى (كون Node أحادي الخيط).
- كومون جي إس (CommonJS / CJS)
- نظام الوحدات التاريخي في Node: التصدير بـ module.exports، والاستيراد بـ require(). متزامن وبسيط ومنتشر في منظومة npm.
- الترجمة (Compilation / tsc) / ملف tsconfig
- لا يُنفَّذ TS مباشرة: المترجم (tsc) يتحقق ويحول ملفات .ts إلى .js. يُضبَط عبر tsconfig.json؛ و ts-node ينفذ TS مباشرة في التطوير.
- console.log()
- دالة العرض في الطرفية (مكافئ «print»)؛ أداة أساسية لرؤية القيم وتصحيح الأخطاء وتتبع التنفيذ.
- const / let (مقابل var)
- const: ثابت لا يُعاد إسناده (يُفضَّل). let: متغير يُعاد إسناده. كلاهما بنطاق الكتلة. يجب تجنب var (نطاق مربك).
- CRUD
- العمليات الأساسية الأربع: الإنشاء (Create) والقراءة (Read) والتعديل (Update) والحذف (Delete)؛ وفي Mongoose، أساليب لامتزامنة (await).
- dependencies مقابل devDependencies / مجلد node_modules
- dependencies: ضرورية في الإنتاج. devDependencies: مفيدة في التطوير فقط (-D). node_modules: مجلد الحزم المثبتة (غير مُنسَّخ، قابل لإعادة التوليد).
- النشر (Déploiement)
- تشغيل التطبيق على خادم متاح على الإنترنت (بدل localhost)؛ عبر منصة PaaS (بسيطة) أو خادم VPS/سحابي (تحكم أكبر ومسؤوليات أكثر).
- التفكيك (Destructuration)
- استخراج قيم الكائنات/المصفوفات في سطر واحد: const { nom } = obj; أو const [a, b] = arr;. منتشر جدًا (استيرادات، بيانات).
- دوكر / الحوسبة بالحاويات (Docker / conteneurisation)
- أداة تغلف التطبيق مع كل بيئته (Node والاعتماديات والإعداد) في حاوية معزولة وقابلة للنقل، تعمل في كل مكان بالطريقة نفسها.
- دوكر كومبوز (Docker Compose)
- ملف docker-compose.yml يعرّف عدة حاويات (تطبيق Node + قاعدة + ذاكرة…) وعلاقاتها، تُطلَق معًا (docker compose up)؛ يصف كل المنظومة.
- emit / on / broadcast
- emit(حدث، بيانات): إرسال. on(حدث، callback): استقبال. الخادم يرسل لعميل، أو للجميع (io.emit / broadcast)، أو لمجموعات (rooms).
- أخطاء متوقعة مقابل غير متوقعة (Erreurs attendues vs inattendues)
- متوقعة: مورد غير موجود (404)، تحقق فاشل (400) — تُدار صراحة. غير متوقعة: علل (500). ويجب أيضًا إدارة أخطاء اللامتزامن (try/catch حول await).
- الخطأ أولًا / try-catch (error-first / try-catch)
- إدارة الأخطاء: الخطأ في الوسيط الأول للدوال الراجعة؛ .catch() للوعود؛ try/catch حول await.
- وحدات ES (ES Modules / ESM)
- نظام الوحدات المعياري للغة: التصدير بـ export، والاستيراد بـ import. اتجاه المستقبل؛ يُفعَّل عبر .mjs أو "type":"module" في package.json.
- أساسيات الإنتاج (Essentiels de production)
- متغيرات البيئة (الإعداد + الأسرار، أبدًا في الكود/Git)، و HTTPS (التشفير)، والسجلات والمراقبة (logs/monitoring)، وبيئات منفصلة (تطوير/تمهيد/إنتاج).
- حدث الخطأ (Événement error)
- حدث خاص: باعث يطلق 'error' دون مستمع يُسقط البرنامج — استمع للأخطاء دائمًا.
- باعث الأحداث (EventEmitter)
- صنف أصلي (الوحدة events) في قلب النموذج الحدثي لـ Node؛ كثير من الكائنات الأصلية (خادم HTTP، التدفقات…) ترث منه.
- تنفيذ ملف (Exécuter un fichier)
- الطريقة الرئيسية للعمل: كتابة الكود في ملف .js وتشغيله بـ node fichier.js (تنفذ Node كل الملف).
- إكسبريس (Express)
- إطار الويب المرجعي لـ Node (بسيط ومرن)، مبني على الوحدة http؛ يبسط التوجيه والتحليل وإدارة الطلبات. أساس معظم تطبيقات Node.
- express.Router()
- أداة تجمع المسارات حسب المورد في ملفات منفصلة (موجه users و products…) تُثبَّت على التطبيق؛ تنظم واجهة تكبر.
- الملفات الثابتة (Fichiers statiques)
- موارد ثابتة تُسلَّم للمتصفح (CSS، صور، JS العميل، خطوط)؛ تُخدَم ببساطة مع الوسيط express.static('public').
- الدالة السهمية (Fonction fléchée / arrow)
- صياغة مختصرة (a) => ... لكتابة الدوال، مستعملة جدًا للدوال الراجعة؛ دون this خاص (تتجنب فخاخًا).
- نظام الملفات (fs / file system)
- وحدة قراءة/كتابة الملفات والمجلدات؛ الدوال بنسخة لامتزامنة (تُفضَّل، fs.promises + await) أو متزامنة (Sync، حاجبة).
- إدارة الأخطاء المركزية (Gestion d'erreurs centralisée)
- وسيط Express خاص (err, req, res, next) يوضع أخيرًا، يستقبل الأخطاء ويعيد ردًا متسقًا (رمز صحيح، رسالة واضحة، دون تسريب تفاصيل حساسة).
- عموميات Node مقابل المتصفح (Globaux Node vs navigateur)
- لا يملك Node window/document/DOM (لا صفحة ويب)؛ ويوفر process و __dirname و __filename و global والوصول إلى النظام.
- تجزئة كلمات المرور (Hachage des mots de passe / bcrypt)
- لا نخزن أبدًا كلمة مرور بنص صريح، بل تجزئتها أحادية الاتجاه (bcrypt، مع ملح، بطيئة عمدًا). عند الاتصال، نقارن دون فك تشفير.
- الوحدة http الأصلية (http / module natif)
- وحدة تتيح إنشاء خادم ويب دون اعتمادية: http.createServer() مع دالة تُستدعى عند كل طلب، ثم .listen(port).
- مكثف الإدخال/الإخراج مقابل مكثف المعالج (I/O-intensif vs CPU-intensif)
- يتفوق Node في مهام الإدخال/الإخراج (خوادم، واجهات، وقت حقيقي)؛ وهو أقل ملاءمة للحسابات الثقيلة المطولة (أحادي الخيط).
- الصورة / Dockerfile / الحاوية (Image / Dockerfile / conteneur)
- الصورة: قالب جامد للتطبيق + البيئة، يعرّفه Dockerfile (وصفة البناء). الحاوية: نسخة قيد التشغيل من صورة.
- حقن SQL (Injection SQL)
- ثغرة حرجة: لا تدمج أبدًا بيانات المستخدم في استعلام SQL؛ استخدم استعلامات مُعامَلة (الـ ORM تحمي تلقائيًا).
- رمز JWT (JSON Web Token)
- رمز موقّع تشفيريًا يُصدَر بعد الاتصال، يعيده العميل مع كل طلب (ترويسة Authorization) ويتحقق منه الخادم؛ دون حالة، شائع للواجهات.
- دعم طويل الأمد مقابل الحالية (LTS vs Current)
- LTS (دعم طويل الأمد، إصدارات زوجية): مستقرة وتُصان طويلًا، تُفضَّل. Current (فردية): أحدث لكن أقل استقرارًا، لاختبار الجديد.
- map / filter / reduce
- أساليب المصفوفات الحديثة لتحويل المجموعات وترشيحها وتجميعها بأسلوب دالي؛ الطريقة الحديثة لمعالجة البيانات.
- أساليب ورموز HTTP (Méthodes & codes HTTP)
- الأساليب: GET (قراءة) و POST (إنشاء) و PUT/PATCH (تعديل) و DELETE (حذف). الرموز: 200 OK و 201 Created و 400/401/404 (أخطاء العميل) و 500 (خطأ الخادم).
- الوسيط (Middleware)
- دالة (req, res, next) تُنفَّذ أثناء معالجة طلب؛ يمكنها الفحص/التعديل وتنفيذ كود، ثم next() للانتقال للتالي. المفهوم الأساسي في Express.
- التخزين المؤقت (Mise en cache / Redis)
- تخزين النتائج المكلفة (استعلامات متكررة، حسابات) في الذاكرة (أو Redis) لتفادي إعادتها؛ غالبًا أقوى رافعة للأداء.
- الوحدة (Module)
- ملف منفصل بمسؤولية، يصدّر ما يتيحه ويستورد ما يحتاجه؛ أساس تنظيم الكود.
- الوحدات الأصلية (Modules natifs / built-in)
- مكتبات مدمجة في Node (دون تثبيت)، تتيح الوصول إلى النظام: fs و path و os و http و crypto و events و stream… تُستورَد باسمها.
- مونغو (MongoDB / NoSQL orienté documents)
- قاعدة تخزن مستندات (DOCUMENTS) (بنى شبيهة بـ JSON/BSON) مجمعة في مجموعات (COLLECTIONS)، دون مخطط صارم؛ قريبة من كائنات JS، شائعة مع Node.
- مونغوز (Mongoose / ODM)
- مخطط كائنات المستندات (ODM) يضيف طبقة عملية فوق MongoDB: مخططات (بنية + تحقق) ونماذج (أساليب المعالجة).
- محرك القوالب (Moteur de templates / vues)
- أداة تولد HTML ديناميكيًا من قوالب (HTML + منطق: متغيرات وحلقات وشروط) وبيانات؛ EJS و Handlebars و Pug…
- محرك V8 (Moteur V8)
- محرك جافاسكربت في متصفح كروم من غوغل (مكتوب بـ C++) يترجم JS وينفذه بسرعة فائقة؛ قلب Node.js.
- نموذج MVC / فصل المسؤوليات (MVC / séparation des responsabilités)
- نماذج (البيانات) ومتحكمات (منطق المعالجة) ومسارات (روابط تفوض للمتحكمات)؛ يفصل الاهتمامات لكود قابل للصيانة والتطور.
- Node + npm
- تثبيت Node يجلب المنفذ Node (الذي يشغل سكربتاتك) و npm (مدير الحزم) معًا.
- Node.js
- بيئة تشغيل تتيح تشغيل جافاسكربت خارج المتصفح (من جهة الخادم)، مبنية على محرك V8 إضافة إلى مكتبة وصول إلى النظام.
- npm والسجل (npm & le registre)
- مدير حزم Node، يتيح الوصول إلى أكبر سجل مفتوح المصدر في العالم (مئات آلاف المكتبات القابلة لإعادة الاستخدام).
- مدير إصدارات Node (nvm / Node Version Manager)
- أداة تتيح تثبيت عدة إصدارات من Node والتبديل بينها؛ ثمينة عندما تتطلب المشاريع إصدارات مختلفة.
- مخطط الكائنات العلائقية (ORM / Prisma, Sequelize)
- مخطط يطابق الجداول مع كائنات JS ويولد SQL؛ معالجة كائنات/أساليب بدل SQL خام (مقروء وآمن ومنتج).
- الوحدة os
- وحدة الوصول إلى معلومات النظام: المنصة والمعالجات (os.cpus) والذاكرة والمجلدات القياسية (homedir و tmpdir).
- منصة كخدمة (PaaS / Render, Railway…)
- منصات تبسط النشر: نربط مستودع Git، فتبني وتطلق وتدير الخادم/HTTPS/التوسع؛ مستوى مجاني شائع. مثالية للبدء.
- ملف package-lock.json
- ملف يقفل الإصدارات الدقيقة المثبتة؛ يضمن أن يثبت الجميع الإصدارات نفسها (قابلية إعادة الإنتاج).
- ملف package.json
- بيان المشروع: الاسم والإصدار والاعتماديات والسكربتات والبيانات الوصفية. يُنشَأ بـ npm init؛ مرجع كل مشروع Node.
- الوحدة path
- وحدة معالجة المسارات المحمولة (path.join و resolve و basename و extname…)؛ تدير اختلافات الفواصل بين الأنظمة (/ مقابل \).
- سلسلة الوسائط (Pipeline de middlewares)
- سلسلة دوال يعبرها كل طلب؛ التوجيه والتحليل (express.json) والمصادقة وإدارة الأخطاء كلها وسائط (app.use أو لكل مسار).
- بريزما (Prisma / moderne)
- ORM محبوب: مخطط تصريحي (schema.prisma) وترحيلات (تنسيخ المخطط) وعميل مولَّد ومنمَّط (إكمال تلقائي وأمان الأنواع — ممتاز مع TypeScript).
- الكائن process
- كائن Node العمومي الذي يتيح الوصول إلى العملية: الوسائط (process.argv) ومتغيرات البيئة (process.env) والخروج (process.exit()).
- التنميط / القياس قبل التحسين (Profilage / mesurer avant d'optimiser)
- تحديد الاختناقات الحقيقية بالقياس قبل التحسين (قاعدة ذهبية)؛ وتجنب التحسين الأعمى أو المبكر.
- البرمجة الحدثية (Programmation événementielle)
- نموذج تُصدِر فيه كائنات أحداثًا وتتفاعل أجزاء أخرى من الكود بالاستماع؛ فصل باسم الحدث.
- الوعد (Promise)
- كائن يمثل قيمة مستقبلية (نتيجة عملية لامتزامنة). ثلاث حالات: معلق (pending) ومُنجَز (fulfilled) ومرفوض (rejected). التفاعل عبر .then() و .catch().
- متى تُستخدَم التدفقات (Quand utiliser les streams)
- كلما عالجنا أحجامًا كبيرة (ملفات ضخمة، رفع/تنزيل، تدفقات شبكة)؛ أما الملفات الصغيرة فيكفي readFile الكلاسيكي.
- البيئة التفاعلية (REPL)
- بيئة تفاعلية تُفتَح بكتابة node وحده: تقرأ/تقيّم/تطبع جافاسكربت سطرًا بسطر. مثالية للتجريب دون إنشاء ملف.
- كائن الطلب (req / request)
- كائن الطلب الوارد: الأسلوب (req.method: GET/POST…) والمسار (req.url) والترويسات (req.headers)، والجسم (يُقرَأ كتدفق في POST).
- كائنات req / res المثراة (req / res enrichis)
- req: هي req.params (المسار) و req.query (سلسلة الاستعلام) و req.body (الجسم). res: هي res.json(data) و res.status(201).json(...) و res.send و res.redirect.
- require مقابل import
- هما صياغتا الاستيراد: require() (كومون جي إس CommonJS) و import (وحدات ES)؛ افهم الاثنتين لأنهما تتعايشان في الكود الحقيقي.
- كائن الرد (res / response)
- كائن بناء الرد: الحالة (res.statusCode) والترويسات (res.setHeader) والجسم (res.write/res.end).
- الدالة res.render()
- أسلوب Express يعرض view: يولد res.render('page', { données }) الـ HTML بحقن البيانات في القالب (مجلد views/).
- الموارد وأساليب HTTP (Ressources & méthodes HTTP)
- GET /users (سرد) و GET /users/:id (قراءة واحد) و POST /users (إنشاء) و PUT/PATCH /users/:id (تعديل) و DELETE /users/:id (حذف) — اصطلاحات متسقة.
- الغرف (Rooms)
- مجموعات عملاء (غرفة دردشة، مباراة) نذيع لها انتقائيًا؛ تنظم الاتصال في الوقت الحقيقي.
- التوجيه (Routage)
- ربط رابط + أسلوب HTTP بمعالجات: app.get('/users', ...) و app.post(...) إلخ. معاملات المسار الديناميكية: '/users/:id' ← req.params.id.
- التوسع الأفقي / موزع الحمل (Scaling horizontal / load balancer)
- توزيع الحمل على عدة خوادم/نسخ خلف موزع حمل؛ لخدمة عدد كبير جدًا من المستخدمين (يفضل التطبيقات عديمة الحالة stateless).
- المخطط والنموذج (Schéma & modèle)
- المخطط يعرّف بنية المستندات (أنواع وتحقق: required و unique وقيم افتراضية)؛ والنموذج، المُنشَأ من المخطط، يوفر أساليب المعالجة.
- الأمان الشامل (Sécurité transversale)
- هيلمت (Helmet) (ترويسات الأمان) و HTTPS والأسرار في متغيرات البيئة (أبدًا في الكود) وتحديد المعدل (rate limiting) والتحقق — و«لا تثق أبدًا بالمدخلات».
- التنسيخ الدلالي وسكربتات npm (semver & scripts npm)
- التنسيخ رئيسي.فرعي.تصحيحي (^ / ~ تتحكم في التحديثات المقبولة). سكربتات npm تعرّف أوامر قابلة لإعادة الاستخدام (npm run <nom>).
- الجلسة مقابل JWT (Session vs JWT)
- الجلسة: حالة في الخادم + ملف تعريف (cookie). أما JWT: رمز حامل ذاتي دون تخزين في الخادم. طريقتان للحفاظ على المصادقة (كون HTTP عديم الحالة).
- سوكيت.يو (Socket.IO)
- المكتبة المرجعية للوقت الحقيقي في Node: حدثية (emit/on)، مع إعادة اتصال تلقائية وبدائل وغرف (rooms) وفضاءات أسماء (namespaces).
- لغة SQL
- لغة الاستعلامات المنظمة: SELECT (قراءة) و INSERT (إنشاء) و UPDATE (تعديل) و DELETE (حذف) و JOIN (دمج جداول مرتبطة).
- قواعد SQL / العلائقية (SQL / relationnel)
- قواعد تنظم البيانات في جداول (أعمدة منمطة) وصفوف وعلاقات عبر مفاتيح أجنبية؛ PostgreSQL و MySQL. ضمانات قوية (مخطط صارم ومعاملات ACID).
- العرض من جهة الخادم (SSR / Server-Side Rendering)
- الخادم يولد HTML كاملًا ويرسله للمتصفح؛ نهج المواقع الكلاسيكية (المحتوى، تحسين الظهور SEO).
- التدفق (Stream / flux)
- معالجة البيانات قطعة قطعة (chunks)، أولًا بأول، بدل تحميل كل شيء في الذاكرة؛ فعال للأحجام الكبيرة (ذاكرة ووقتًا).
- القالب النصي (Template literal)
- سلسلة بعلامات مائلة تتيح إدخال المتغيرات: `Bonjour ${nom}` — أنظف من الدمج بـ +.
- الوقت الحقيقي (Temps réel)
- حالات يرسل فيها الخادم بيانات للعميل دون أن يطلبها، فوريًا (دردشة، إشعارات، بيانات حية، ألعاب)؛ غير ملائم لنموذج طلب-رد HTTP.
- الطرفية / المسار PATH (Terminal / PATH)
- وحدة التحكم حيث نطلق node و npm؛ يتحقق node -v و npm -v من التثبيت (إن أجابا، فـ Node في PATH).
- الاختبارات المؤتمتة (Tests automatisés / Jest)
- كود يختبر كودك: وحدوية (دالة معزولة) وتكاملية (عدة أجزاء/مسار مع قاعدته) وشاملة. Jest هو الإطار الشائع.
- التنميط الثابت مقابل الديناميكي (Typage statique vs dynamique)
- الثابت (TS): أنواع مصرَّح بها وتُتحقَّق قبل التنفيذ (عند الترجمة) — يمسك أخطاء مبكرًا. الديناميكي (JS): تُتحقَّق الأنواع فقط عند التنفيذ (مرن لكن مصدر علل وقت التشغيل).
- أنواع التدفقات (Types de streams)
- قابل للقراءة (Readable) وقابل للكتابة (Writable) ومزدوج (Duplex، مثل المقبس socket) ومحوِّل (Transform: يحول أثناء المرور: ضغط، تشفير).
- تايب سكربت (TypeScript)
- مجموعة عليا من جافاسكربت تضيف التنميط الثابت (كل JS صالح هو TS صالح)؛ تُترجَم إلى جافاسكربت عادية ينفذها Node.
- التحقق من المدخلات (Validation des entrées)
- التحقق من أن البيانات المستلمة من عميل بالصيغة المتوقعة (حقول مطلوبة وأنواع وقيود) قبل معالجتها؛ تُرفَض برمز 400 إن بطلت. المكتبات: Zod و Joi.
- الخادم الافتراضي الخاص (VPS)
- خادم افتراضي مستأجَر نديره بأنفسنا (Node والإعداد والأمان و PM2 و Nginx و HTTPS)؛ تحكم ومرونة أكبر، لكن مسؤوليات أكثر.
- في إس كود (VS Code)
- المحرر المعياري لـ Node/JavaScript: مجاني ودعم JS مدمج وطرفية مدمجة وإضافات (ESLint و Prettier) لجودة الكود وتنسيقه.
- ويب سوكيت (WebSocket)
- بروتوكول يؤسس اتصالًا دائمًا وثنائي الاتجاه: يبقى مفتوحًا، ويتبادل العميل والخادم الرسائل في أي وقت وفي الاتجاهين.
- خيوط العمال (Worker threads)
- خيوط منفصلة لتنفيذ مهام مكثفة المعالج (حسابات ثقيلة) دون حجب الخيط الرئيسي / حلقة الأحداث.