Node.js

أول برنامج Node.js لك — من الطرفية إلى المتصفح 2026

📅 2026-11-02⏱ 8 دقائق قراءة
في المقال السابق، قمنا بتثبيت Node.js وإعداد بيئة العمل. الآن حان الوقت لكتابة **أول برنامج Node.js** وفهم كيف يعمل. في هذا الدليل العملي، سنأخذك خطوة بخطوة من الطباعة في الطرفية إلى التعامل مع المتغيرات والوحدات، مع تمارين وحلول. ## لماذا نبدأ بـ "Hello World"؟ برنامج "Hello World" هو تقليد قديم في عالم البرمجة. السبب في أهميته: - **يتحقق من أن بيئة العمل تعمل** — إذا ظهرت الرسالة، فكل شيء جاهز. - **يعرّفك على بنية البرنامج** — كيف يُكتب الكود وكيف يُشغّل. - **يعطيك إحساساً بالإنجاز** — أول برنامج يعمل هو لحظة لا تُنسى. - **يبني الثقة** — تنتقل من "لا أعرف شيئاً" إلى "أنا أبرمج". ## الفرق بين Node.js والمتصفح <table> <thead> <tr> <th>المعيار</th> <th>المتصفح</th> <th>Node.js</th> </tr> </thead> <tbody> <tr> <td><strong>البيئة</strong></td> <td>المتصفح</td> <td>السيرفر</td> </tr> <tr> <td><strong>DOM</strong></td> <td>✅ متاح</td> <td>❌ غير متاح</td> </tr> <tr> <td><strong>window</strong></td> <td>✅ متاح</td> <td>❌ غير متاح</td> </tr> <tr> <td><strong>fs (الملفات)</strong></td> <td>❌ غير متاح</td> <td>✅ متاح</td> </tr> <tr> <td><strong>process</strong></td> <td>❌ غير متاح</td> <td>✅ متاح</td> </tr> <tr> <td><strong>Console</strong></td> <td>✅ متاح</td> <td>✅ متاح</td> </tr> </tbody> </table> **⚠️ مهم:** `document` و `window` غير متاحة في Node.js — لأنها خاصة بالمتصفح. ## الطريقة الأولى: تشغيل Node.js من الطرفية ### الخطوة 1: إنشاء مجلد المشروع افتح VS Code، ثم: 1. اذهب إلى **File → Open Folder** 2. اختر مجلد `my-first-node` الذي أنشأته في المقال السابق 3. أو أنشئ مجلداً جديداً باسم `node-learning` ### الخطوة 2: إنشاء ملف `hello.js` داخل VS Code: 1. اضغط `Ctrl + N` لإنشاء ملف جديد 2. اضغط `Ctrl + S` لحفظه 3. احفظه باسم `hello.js` ### الخطوة 3: كتابة أول سطر كود اكتب في الملف: ```javascript console.log("مرحباً من Node.js! 🎉"); ``` احفظ الملف بـ `Ctrl + S`. **شرح الكود:** - **`console`:** كائن (object) يمثل الطرفية. - **`.log()`:** دالة تطبع ما بداخلها. - **`"مرحباً من Node.js! 🎉"`:** النص (string). ### الخطوة 4: تشغيل البرنامج في Terminal، اكتب: ```bash node hello.js ``` **النتيجة المتوقعة:** ``` مرحباً من Node.js! 🎉 ``` **🎉 مبروك! كتبت وشغّلت أول برنامج Node.js!** ### الخطوة 5: إضافة المزيد من الأسطر أضف أسطراً أخرى: ```javascript console.log("مرحباً من Node.js! 🎉"); console.log("اسمي أحمد"); console.log("أتعلم Backend Development"); console.log("اليوم هو يوم رائع!"); ``` شغّل البرنامج: ```bash node hello.js ``` **النتيجة:** ``` مرحباً من Node.js! 🎉 اسمي أحمد أتعلم Backend Development اليوم هو يوم رائع! ``` **لاحظ:** Node.js ينفذ الأسطر **بالترتيب** من الأعلى إلى الأسفل. ## الطريقة الثانية: تشغيل Node.js تفاعلياً (REPL) **REPL** = **Read-Eval-Print Loop**. **لتشغيله:** ```bash node ``` **النتيجة:** ``` Welcome to Node.js v20.x.x. Type ".help" for more information. > ``` **جرب الأوامر:** ```javascript > 2 + 3 5 > "مرحباً" + " " + "بالعالم" 'مرحباً بالعالم' > [1, 2, 3].map(n => n * 2) [ 2, 4, 6 ] > .exit ``` **الفائدة:** تجربة سريعة للكود بدون إنشاء ملف. ## المتغيرات في Node.js **المتغيرات** هي نفسها في JavaScript: ```javascript const name = "أحمد"; let age = 25; var city = "عمان"; // تجنبه console.log(name); // أحمد console.log(age); // 25 console.log(city); // عمان ``` **⚠️ نصيحة:** استخدم `const` افتراضياً، و `let` عند الحاجة للتغيير. ## أنواع البيانات ```javascript // String const firstName = "أحمد"; const lastName = 'محمد'; // Number const price = 99.99; const quantity = 5; // Boolean const isActive = true; // Array const fruits = ["تفاح", "موز", "برتقال"]; // Object const user = { name: "أحمد", age: 25, email: "[email protected]", }; // Null const nothing = null; // Undefined let notDefined; ``` ## المصفوفات في Node.js ```javascript const numbers = [1, 2, 3, 4, 5]; // إضافة numbers.push(6); // حذف numbers.pop(); // التحويل const doubled = numbers.map(n => n * 2); // التصفية const evens = numbers.filter(n => n % 2 === 0); // التجميع const sum = numbers.reduce((acc, n) => acc + n, 0); console.log(sum); // 15 ``` ## الكائنات في Node.js ```javascript const user = { name: "أحمد", age: 25, greet() { return `مرحباً، أنا ${this.name}`; }, }; console.log(user.greet()); // مرحباً، أنا أحمد // إضافة خاصية user.email = "[email protected]"; // حذف خاصية delete user.age; ``` ## الوحدات (Modules) **الوحدات** هي طريقة لتقسيم الكود إلى ملفات. ### 1. `require` (الطريقة التقليدية - CommonJS) **`math.js`:** ```javascript function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } module.exports = { add, subtract }; ``` **`index.js`:** ```javascript const math = require("./math"); console.log(math.add(5, 3)); // 8 console.log(math.subtract(5, 3)); // 2 ``` ### 2. `import` (الطريقة الحديثة - ES Modules) **`math.mjs`:** ```javascript export function add(a, b) { return a + b; } export function subtract(a, b) { return a - b; } ``` **`index.mjs`:** ```javascript import { add, subtract } from "./math.mjs"; console.log(add(5, 3)); // 8 console.log(subtract(5, 3)); // 2 ``` **⚠️ للاستخدام ES Modules:** أضف في `package.json`: ```json "type": "module" ``` ## الوحدات المدمجة Node.js يحتوي على **وحدات مدمجة** جاهزة: ### 1. `os` — معلومات النظام ```javascript const os = require("os"); console.log("نظام التشغيل:", os.platform()); console.log("المعالجات:", os.cpus().length); console.log("الذاكرة الحرة:", os.freemem()); ``` ### 2. `path` — التعامل مع المسارات ```javascript const path = require("path"); console.log(path.join("users", "documents", "file.txt")); // users/documents/file.txt ``` ### 3. `fs` — نظام الملفات ```javascript const fs = require("fs"); // قراءة ملف const content = fs.readFileSync("file.txt", "utf-8"); console.log(content); // كتابة ملف fs.writeFileSync("output.txt", "مرحباً!"); ``` ### 4. `process` — معلومات العملية ```javascript console.log("الإصدار:", process.version); console.log("المسار:", process.cwd()); console.log("المتغيرات:", process.env.NODE_ENV); ``` ## مثال عملي: آلة حاسبة **`calculator.js`:** ```javascript function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } function multiply(a, b) { return a * b; } function divide(a, b) { if (b === 0) throw new Error("لا يمكن القسمة على صفر"); return a / b; } module.exports = { add, subtract, multiply, divide }; ``` **`index.js`:** ```javascript const { add, subtract, multiply, divide } = require("./calculator"); console.log("5 + 3 =", add(5, 3)); console.log("5 - 3 =", subtract(5, 3)); console.log("5 × 3 =", multiply(5, 3)); console.log("6 ÷ 2 =", divide(6, 2)); ``` **النتيجة:** ``` 5 + 3 = 8 5 - 3 = 2 5 × 3 = 15 6 ÷ 2 = 3 ``` ## تمارين عملية ### تمرين 1: طباعة معلوماتك اكتب برنامجاً يطبع: - اسمك - عمرك - مدينتك **الحل:** ```javascript console.log("الاسم: أحمد"); console.log("العمر: 25"); console.log("المدينة: عمان"); ``` ### تمرين 2: استخدام المتغيرات أعد كتابة التمرين السابق باستخدام المتغيرات. **الحل:** ```javascript const name = "أحمد"; const age = 25; const city = "عمان"; console.log(`الاسم: ${name}`); console.log(`العمر: ${age}`); console.log(`المدينة: ${city}`); ``` ### تمرين 3: العمليات الحسابية اكتب برنامجاً يحسب مجموع رقمين. **الحل:** ```javascript const num1 = 10; const num2 = 5; const sum = num1 + num2; console.log(`المجموع: ${sum}`); ``` ### تمرين 4: المصفوفات أنشئ مصفوفة أرقام، واطبع مجموعها. **الحل:** ```javascript const numbers = [10, 20, 30, 40, 50]; const sum = numbers.reduce((acc, n) => acc + n, 0); console.log(`المجموع: ${sum}`); // 150 ``` ### تمرين 5: الكائنات أنشئ كائناً `book` يحتوي على title, author, year. **الحل:** ```javascript const book = { title: "تعلم Node.js", author: "أحمد", year: 2026, }; console.log(`${book.title} - ${book.author} (${book.year})`); ``` ### تمرين 6: وحدة مخصصة أنشئ وحدة `greetings.js` تحتوي على دالة ترحيب. **الحل:** **`greetings.js`:** ```javascript function greet(name) { return `مرحباً ${name}!`; } module.exports = { greet }; ``` **`index.js`:** ```javascript const { greet } = require("./greetings"); console.log(greet("أحمد")); // مرحباً أحمد! ``` ### تمرين 7: وحدة `os` اطبع معلومات نظام التشغيل. **الحل:** ```javascript const os = require("os"); console.log("النظام:", os.platform()); console.log("الإصدار:", os.release()); console.log("المعالجات:", os.cpus().length); ``` ### تمرين 8: وحدة `fs` اكتب ملفاً واقرأه. **الحل:** ```javascript const fs = require("fs"); // كتابة fs.writeFileSync("test.txt", "مرحباً من Node.js!"); // قراءة const content = fs.readFileSync("test.txt", "utf-8"); console.log(content); // مرحباً من Node.js! ``` ## حل المشاكل الشائعة ### 🔴 المشكلة 1: `Cannot find module 'xxx'` **السبب:** الوحدة غير مثبتة أو المسار خاطئ. **الحل:** ```bash npm install xxx ``` **أو** تحقق من المسار النسبي: ```javascript const math = require("./math"); // ✅ const math = require("math"); // ❌ (يبحث في node_modules) ``` ### 🔴 المشكلة 2: `document is not defined` **السبب:** `document` غير متاح في Node.js. **الحل:** استخدم `fs` للتعامل مع الملفات. ### 🔴 المشكلة 3: `window is not defined` **السبب:** `window` غير متاح في Node.js. **الحل:** استخدم `global` أو `globalThis`. ### 🔴 المشكلة 4: `require is not defined` (مع ES Modules) **السبب:** استخدمت `import/export` لكن `package.json` لا يحتوي على `"type": "module"`. **الحل:** ```json "type": "module" ``` ### 🔴 المشكلة 5: `SyntaxError: Unexpected token` **السبب:** خطأ في كتابة الكود. **الحل:** راجع السطر المشار إليه، وتأكد من الأقواس والفواصل. ## جدول الأوامر الأساسية <table> <thead> <tr> <th>الأمر</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>node file.js</code></td> <td>تشغيل ملف</td> </tr> <tr> <td><code>node</code></td> <td>فتح REPL</td> </tr> <tr> <td><code>node -e "code"</code></td> <td>تشغيل كود مباشرة</td> </tr> <tr> <td><code>node --version</code></td> <td>عرض الإصدار</td> </tr> <tr> <td><code>require("./file")</code></td> <td>استيراد وحدة</td> </tr> <tr> <td><code>module.exports</code></td> <td>تصدير وحدة</td> </tr> </tbody> </table> ## قائمة تحقق نهائية <table> <thead> <tr> <th>المهمة</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>إنشاء ملف <code>hello.js</code></td> <td>⬜</td> </tr> <tr> <td>تشغيله بـ <code>node hello.js</code></td> <td>⬜</td> </tr> <tr> <td>تجربة REPL</td> <td>⬜</td> </tr> <tr> <td>استخدام المتغيرات والأنواع</td> <td>⬜</td> </tr> <tr> <td>إنشاء وحدة مخصصة</td> <td>⬜</td> </tr> <tr> <td>استخدام <code>os</code> و <code>fs</code></td> <td>⬜</td> </tr> <tr> <td>حل التمارين الثمانية</td> <td>⬜</td> </tr> </tbody> </table> ## ماذا بعد هذا المقال؟ الآن بعد أن كتبت أول برنامج Node.js، أنت جاهز للمقال التالي: 1. **الوحدات ونظام الملفات** — تعمق في `modules` و `fs`. 2. **npm وإدارة الحزم** — تثبيت المكتبات. 3. **بناء HTTP Server** — أول سيرفر. ## الخلاصة في هذا المقال، تعلمت: - ✅ الفرق بين Node.js والمتصفح. - ✅ تشغيل Node.js من الطرفية. - ✅ REPL للاختبار السريع. - ✅ المتغيرات والأنواع. - ✅ المصفوفات والكائنات. - ✅ الوحدات (`require` و `import`). - ✅ الوحدات المدمجة (`os`, `path`, `fs`, `process`). - ✅ حل 8 تمارين عملية. **تذكر:** Node.js هو نفس JavaScript، لكن على السيرفر. أتقن الأساسيات قبل الانتقال.