مكتبة جافا سكريبت القياسية (Node.js): نظرة شاملة
Node.js هي بيئة تشغيل لجافا سكريبت، مبنية على محرك V8. من أهم مزاياها المكتبة القياسية الغنية، التي توفر مئات الوحدات الجاهزة لحل المهام اليومية لتطوير الواجهة الخلفية: من العمل مع نظام الملفات إلى إنشاء خوادم HTTP. في هذه المقالة، سنستعرض الوحدات الرئيسية، وإمكانياتها، ونقدم أمثلة عملية على الكود.
1. وحدة fs (نظام الملفات)
وحدة fs هي الأساس للعمل مع الملفات والدلائل. تدعم العمليات المتزامنة وغير المتزامنة.
- قراءة ملف (غير متزامن):
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data);});- الكتابة في ملف:
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => { if (err) throw err; console.log('تم حفظ الملف');});- العمل مع الدلائل (إنشاء، حذف، قراءة):
// إنشاء مجلدfs.mkdir('newDir', { recursive: true }, (err) => { if (err) throw err; console.log('تم إنشاء المجلد');});
// قراءة محتويات المجلدfs.readdir('.', (err, files) => { console.log(files); // مصفوفة بأسماء الملفات});2. وحدة path
وحدة path تبسط العمل مع مسارات الملفات والمجلدات، بغض النظر عن نظام التشغيل.
- دمج المسارات:
const path = require('path');
const fullPath = path.join('users', 'admin', 'docs', 'file.txt');console.log(fullPath); // users/admin/docs/file.txt (في Linux) أو users\\admin\\docs\\file.txt (في Windows)- الحصول على امتداد الملف:
const ext = path.extname('image.png');console.log(ext); // '.png'- تطبيع المسار (يزيل ".." و "." الزائدة):
const normalized = path.normalize('/foo/bar//baz/asdf/quux/..');console.log(normalized); // /foo/bar/baz/asdf3. وحدة http
تسمح بإنشاء خوادم وعملاء HTTP. على هذه الوحدة تم بناء أطر العمل مثل Express.js.
- خادم HTTP بسيط:
const http = require('http');
const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('مرحباً بالعالم!');});
server.listen(3000, () => { console.log('الخادم يعمل على المنفذ 3000');});- عميل HTTP (إجراء طلب GET):
http.get('http://jsonplaceholder.typicode.com/posts/1', (res) => { let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => console.log(JSON.parse(data)));});4. وحدة events
تنفذ نمط "المراقب" (EventEmitter). تسمح بإنشاء أحداث مخصصة والاشتراك فيها.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// الاشتراك في الحدثmyEmitter.on('greet', (name) => { console.log(`مرحباً، ${name}!`);});
// توليد الحدثmyEmitter.emit('greet', 'أليكسي'); // مرحباً، أليكسي!5. وحدة buffer
Buffer هو مخزن مؤقت للبيانات الثنائية. يُستخدم عند العمل مع التدفقات، الملفات، بروتوكولات الشبكة.
// إنشاء مخزن مؤقت من سلسلة نصيةconst buf = Buffer.from('Hello', 'utf8');console.log(buf); // <Buffer 48 65 6c 6c 6f>
// دمج المخازن المؤقتةconst buf1 = Buffer.from('Node');const buf2