تخطَّ إلى المحتوى

fs.readFile()

قراءة ملف بشكل غير متزامن fs.readFile()

fs.readFile() تقرأ محتوى ملف كاملًا بشكل غير متزامن (async) وتُرجع النتيجة عبر دالة callback بدون حجب حلقة الأحداث.

fs.readFile() تفتح الملف وتقرأ محتواه بالكامل بالذاكرة ثم تستدعي الـ callback بنمط الخطأ-أولًا: (err, data). إذا لم تحدّد خيار encoding يصلك data كـ Buffer (بيانات خام)، وإذا حدّدته (مثلًا 'utf8') يصلك نص جاهز مباشرة.

لأنها غير متزامنة، لا تجمّد حلقة الأحداث بينما تنتظر القرص — مناسبة تمامًا داخل خادم يخدم طلبات متعددة بنفس الوقت. لكن لأنها تحمّل الملف كاملًا بالذاكرة دفعة واحدة، فهي غير مناسبة لملفات ضخمة جدًا (فيديوهات، أرشيفات كبيرة).

الصياغة

fs.readFile(path[, options], callback)

📄 مثال

const fs = require('node:fs');

fs.readFile('notes.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('فشلت القراءة:', err.message);
    return;
  }
  console.log(data); // نص جاهز لأننا حدّدنا utf8
});

// بدون تحديد encoding نستلم Buffer:
fs.readFile('notes.txt', (err, buffer) => {
  if (err) throw err;
  console.log(buffer); // <Buffer ...>
});

أهم المعاملات

المعاملالوظيفة
pathمسار الملف — نص أو Buffer أو رابط file://
options.encodingمثل 'utf8' — إن لم تُحدَّد تصلك بيانات Buffer خام
callback(err, data)يُستدعى بعد اكتمال القراءة أو فشلها

💡 نصائح عملية

  • مرّر خيار encoding مثل 'utf8' لتحصل على نص جاهز بدل Buffer خام
  • لملفات كبيرة جدًا استخدم fs.createReadStream بدل تحميل الملف كاملًا بالذاكرة دفعة واحدة

⚠️ أخطاء شائعة

  • نسيان تحديد encoding يرجّع Buffer وليس نصًا — طباعته مباشرة تظهر بيانات خام لا نصًا مقروءًا
  • استخدام النسخة المتزامنة readFileSync داخل خادم يخدم طلبات متعددة يحجب حلقة الأحداث لبقية الطلبات أثناء القراءة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار NODEJS الكامل بالعربي.