أساسيات Node.js

الدرس 4 من 18

0% مكتمل

الفصل الثاني: الأساسيات

أساسيات Node.js

تعلم المفاهيم الأساسية لبرمجة Node.js ونظام الوحدات

أول برنامج Node.js

لنبدأ بإنشاء برنامج بسيط:

// hello.js console.log('مرحباً بك في Node.js!'); console.log('Node.js version:', process.version); console.log('Platform:', process.platform);

لتشغيل هذا الملف:

node hello.js

نصيحة

الكائن process هو كائن عام (global) في Node.js يوفر معلومات عن العملية الحالية. لا تحتاج لاستيراده!

نظام الوحدات (Module System)

Node.js يستخدم نظام وحدات يسمى CommonJS. هذا يعني أنك تستطيع تقسيم كودك إلى ملفات منفصلة وإعادة استخدامها.

تصدير الوحدات (Exports):

// math.js function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } // طريقة 1: التصدير المنفصل module.exports.add = add; module.exports.subtract = subtract; // طريقة 2: التصدير الجماعي module.exports = { add, subtract };

استيراد الوحدات (Require):

// app.js const math = require('./math'); console.log(math.add(5, 3)); // 8 console.log(math.subtract(10, 4)); // 6

ES Modules (الطريقة الحديثة):

يمكنك أيضاً استخدام import/export الحديثة:

// math.mjs (لاحظ الامتداد .mjs) export function add(a, b) { return a + b; } export function subtract(a, b) { return a - b; } // app.mjs import { add, subtract } from './math.mjs'; console.log(add(5, 3));

أو في package.json:

{ "type": "module" }

الوحدات المدمجة (Built-in Modules)

Node.js يأتي مع العديد من الوحدات المفيدة:

1. File System (fs):

const fs = require('fs'); // قراءة ملف const data = fs.readFileSync('file.txt', 'utf8'); console.log(data); // كتابة ملف fs.writeFileSync('output.txt', 'Hello World!'); // قراءة غير متزامنة (موصى بها) fs.readFile('file.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); });

2. Path:

const path = require('path'); const filePath = '/users/john/documents/file.txt'; console.log(path.basename(filePath)); // file.txt console.log(path.dirname(filePath)); // /users/john/documents console.log(path.extname(filePath)); // .txt // دمج مسارات بشكل صحيح const newPath = path.join(__dirname, 'uploads', 'image.jpg');

3. OS:

const os = require('os'); console.log('Platform:', os.platform()); console.log('CPU:', os.cpus().length, 'cores'); console.log('Memory:', Math.round(os.totalmem() / 1024 / 1024 / 1024), 'GB'); console.log('Home dir:', os.homedir());

4. HTTP:

const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('مرحباً من خادم Node.js!'); }); server.listen(3000, () => { console.log('Server running on http://localhost:3000'); });

متغيرات البيئة (Environment Variables)

يمكنك الوصول لمتغيرات البيئة عبر process.env:

// الوصول لمتغير البيئة const port = process.env.PORT || 3000; const nodeEnv = process.env.NODE_ENV || 'development'; console.log(`Server will run on port ${port}`); console.log(`Environment: ${nodeEnv}`);

تعيين متغيرات البيئة:

# Windows (CMD) set PORT=8080 set NODE_ENV=production node app.js # Windows (PowerShell) $env:PORT=8080 $env:NODE_ENV="production" node app.js # macOS/Linux PORT=8080 NODE_ENV=production node app.js

ملف .env

استخدم مكتبة dotenv لإدارة متغيرات البيئة بشكل أفضل:

pnpm add dotenv // في بداية app.js require('dotenv').config(); // الآن يمكنك إنشاء ملف .env PORT=3000 DB_URL=mongodb://localhost/mydb

Timers

Node.js يوفر دوال توقيت مشابهة للمتصفح:

// setTimeout - تنفيذ بعد مدة معينة setTimeout(() => { console.log('بعد 2 ثانية'); }, 2000); // setInterval - تنفيذ بشكل متكرر const interval = setInterval(() => { console.log('كل ثانية'); }, 1000); // إيقاف interval بعد 5 ثوانٍ setTimeout(() => { clearInterval(interval); console.log('تم الإيقاف'); }, 5000); // setImmediate - تنفيذ فوري بعد العمليات الحالية setImmediate(() => { console.log('Immediate'); }); // process.nextTick - أعلى أولوية process.nextTick(() => { console.log('Next tick'); });

تمرين عملي

أنشئ نظام قراءة وكتابة ملفات

أنشئ برنامجاً يقوم بـ:

  1. قراءة ملف نصي
  2. تحويل النص إلى أحرف كبيرة
  3. حفظ النتيجة في ملف جديد
const fs = require('fs'); const path = require('path'); // قراءة الملف fs.readFile('input.txt', 'utf8', (err, data) => { if (err) { console.error('خطأ في القراءة:', err); return; } // معالجة البيانات const upperData = data.toUpperCase(); // كتابة الملف الجديد fs.writeFile('output.txt', upperData, (err) => { if (err) { console.error('خطأ في الكتابة:', err); return; } console.log('تم بنجاح!'); }); });

الخلاصة

  • Node.js يستخدم نظام وحدات CommonJS و ES Modules
  • استخدم require() أو import لاستيراد الوحدات
  • Node.js يوفر وحدات مدمجة قوية (fs, path, os, http)
  • process.env للوصول لمتغيرات البيئة
  • استخدم dotenv لإدارة المتغيرات بشكل أفضل
  • Node.js يوفر دوال توقيت للعمليات غير المتزامنة