من لغة مُحتقرة إلى تقنية أساسية
جافا سكريبت، التي كانت تُحتقر في الماضي من قبل لغات البرمجة الأخرى لكونها مجرد لغة سكريبتات في الويب، أصبحت لها هيبة كبيرة جدًا عندما ظهر Node.js في عام 2009. لم يقتصر دور Node.js على جعل جافا سكريبت تعمل خارج المتصفح، بل جاء ليثبت أنها قادرة على بناء الواجهات الخلفية (Backend) والأمامية (Frontend) بلغة برمجة واحدة. يمكن القول إنه التقنية الوحيدة المتألقة في هذا المجال، وفي رأيي، لا يوجد غيرها على الساحة تمنحك القدرة على بناء كلا الجانبين بنفس اللغة.
ما هو Node.js بالضبط؟
إذا أردنا تعريف Node.js ببساطة، فهو عبارة عن بيئة تشغيل (Runtime Environment) لجافا سكريبت. هذا يعني أنه يقوم بتشغيل ملفات جافا سكريبت دون الحاجة إلى المتصفح، مما يسمح بتشغيلها في أي مكان، معتمداً على بنيته الخاصة.
ملاحظة هامة: الأهم أن تفهم أن Node.js ليس إطار عمل (Framework) كما يعتقده الكثيرون، بل هو بيئة تشغيل (Runtime). وهذا ما تحدثنا عنه سابقًا في مقال مفصل.
ماذا يجب أن أتعلم في Node.js؟
يأتي السؤال المهم: ما الذي أحتاج إلى تعلمه في Node.js طالما أنه بيئة تشغيل؟
ببساطة، عليك أن تفهم أن لديه مجموعة من المكتبات القياسية (Standard Libraries) التي تأتي مدمجة معه، أي أنك لا تحتاج إلى تنزيل أي شيء خارجي لها. إذا كان لديك Node.js، يمكنك كتابة كود جافا سكريبت وتشغيله به.
ولكن، هل يجب أن أتعلم كل هذه المكتبات القياسية؟ ليس بالضرورة. أبرز المكتبات التي غالبًا ما ستستخدمها هي:
Events
File System (fs)
Console
(وبالطبعconsole.log()
التي نستخدمها جميعًا لتصحيح الأخطاء).
ليس من الضروري أن تضيع وقتك في تعلم كل هذه المكتبات بالتفصيل. عندما تحتاج إلى شيء منها، يمكنك الرجوع إلى المرجع الرسمي على الإنترنت أو الاستعانة بأدوات الذكاء الاصطناعي الحديثة.
يحتوي Node.js أيضًا على خادم HTTP مدمج (http
) يمكنك استخدامه لإنشاء خادم أو إرسال طلبات (Requests) كعميل (Client). ولكن في الحقيقة، لا تُستخدم هذه الوحدة بكثرة بشكل مباشر. على الأغلب، ستتجه لتعلم أطر عمل للواجهات الخلفية (Backend Frameworks) تعمل فوق Node.js، مثل:
- Express.js
- NestJS
أساس التعامل مع Node.js
الأهم حقًا الذي يجب أن تفهمه لتتعامل مع Node.js هو جافا سكريبت نفسها، وتحديدًا مفاهيم البرمجة غير المتزامنة (Asynchronous Programming) مثل:
async/await
- الوعود (Promises)
السبب هو أن Node.js في الأساس يعتمد على مكدس تنفيذ أحادي الخيط (Single-threaded). وهنا يأتي دور البرمجة غير المتزامنة لجعل الكود يُنفذ بطريقة غير حاجزة (Non-blocking)، مما يضمن أداءً عاليًا للتطبيقات.
كان هذا شرحًا سريعًا لـ Node.js.