العمل مع نظام الملفات في JavaScript: دليل شامل لـ Node.js

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع نظام الملفات في JavaScript (Node.js)



في تطوير الويب الحديث، تجاوزت JavaScript حدود المتصفح منذ فترة طويلة. بفضل منصة Node.js، حصل المطورون على إمكانية إنشاء تطبيقات الخادم، والعمل مع قواعد البيانات، وبالطبع التفاعل مع نظام الملفات. القدرة على قراءة وكتابة وحذف ونقل الملفات هي واحدة من المهارات الأساسية لأي مطور backend. في هذه المقالة، سنشرح بالتفصيل كيفية العمل مع نظام الملفات في JavaScript على Node.js باستخدام الوحدة المدمجة fs وإصدارها الحديث القائم على Promises fs/promises.



ستكون المادة مفيدة لكل من المبتدئين الذين بدأوا للتو في تعلم Node.js، والمطورين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم. يمكن تشغيل جميع أمثلة الكود في بيئة التطوير الخاصة بك.



استيراد وحدة fs والطرق الأساسية



للعمل مع نظام الملفات في Node.js، تُستخدم الوحدة المدمجة fs (file system). لا تحتاج إلى تثبيتها بشكل منفصل - فهي متاحة فور تثبيت Node.js. يتم استيرادها بالطريقة القياسية:



const fs = require('fs');


ومع ذلك، في JavaScript الحديث (ES6+) و Node.js (بدءًا من الإصدار 14)، يُوصى باستخدام صياغة ES modules والعمل مع إصدار Promises fs/promises. هذا يتجنب "callback hell" ويسمح بكتابة كود غير متزامن أكثر نظافة باستخدام async/await.



import * as fs from 'fs/promises';// أوconst fs = require('fs/promises');


تنقسم الطرق الرئيسية لوحدة fs إلى ثلاث فئات:



  • متزامنة - تمنع تدفق التنفيذ (مثل fs.readFileSync()). تُستخدم نادرًا، خاصة في نصوص التهيئة.
  • غير متزامنة مع callbacks - أسلوب Node.js التقليدي (مثل fs.readFile()).
  • غير متزامنة مع Promises - الأسلوب الحديث (fs/promises). يُوصى به لمعظم المهام.


قراءة الملفات في Node.js



لنبدأ بأكثر الإجراءات شيوعًا - قراءة محتوى ملف. سننظر في طريقتين: باستخدام callbacks وباستخدام Promises.



القراءة عبر callbacks (الطريقة التقليدية)



const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error('خطأ في قراءة الملف:', err); return; } console.log('محتوى الملف:', data);});


لاحظ: نمرر الترميز 'utf8' كوسيط ثانٍ. إذا لم تحدده، فستعود البيانات كمخزن ثنائي (Buffer).



القراءة عبر Promises (الطريقة الموصى بها)



import { readFile } from 'fs/promises';

async function readExample() { try { const data = await readFile('example.txt', 'utf8'); console.log('محتوى الملف:', data); } catch (err) { console.error('خطأ في قراءة الملف:', err); }}

readExample();


أصبح الكود أنظف وأسهل للفهم. تتم معالجة الأخطاء عبر try/catch، وهو أمر مألوف للمطورين الذين يعرفون لغات أخرى.



كتابة البيانات إلى ملف



الكتابة إلى ملف هي ثاني أهم عملية. في Node.js، هناك طريقتان رئيسيتان: writeFile (يكتب فوق الملف) و appendFile (يضيف البيانات إلى نهاية الملف).



الكتابة فوق الملف



import { writeFile } from 'fs/promises';

async function writeExample() { try { await writeFile('output.txt', 'مرحباً، أيها العالم!', 'utf8'); console.log('تم كتابة الملف بنجاح'); } catch (err) { console.error('خطأ في الكتابة:', err); }}

writeExample();


إذا كان الملف output.txt غير موجود، فسيتم إنشاؤه تلقائيًا. إذا كان موجودًا، فسيتم الكتابة فوق محتواه بالكامل.

المدونات

توصيات الكتب