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: "ahmed@example.com",
};
// 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 = "ahmed@example.com";
// حذف خاصية
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، لكن على السيرفر. أتقن الأساسيات قبل الانتقال.