fs (file system) মডিউল ফাইল পড়ে আর লেখে — এমন কিছু যা ব্রাউজার JavaScript-কে কখনো করতে দেওয়া হয় না। এটি সবচেয়ে স্পষ্ট উদাহরণগুলোর একটি যা Node.js-কে একটি পেজে চলা JavaScript থেকে আলাদা করে।
const fs = require('fs')
const data = fs.readFileSync('notes.txt', 'utf8')
console.log(data)দ্বিতীয় আর্গুমেন্ট, 'utf8', Node-কে কাঁচা বাইটের বদলে টেক্সট ফেরত দিতে বলে। এটি বাদ দিলে আপনি পড়ার যোগ্য একটি স্ট্রিং-এর বদলে একটি Buffer পাবেন — এই কোর্সে পরে কভার করা হয়েছে।
fs.writeFileSync('output.txt', 'Hello, file!')writeFileSync ফাইলটি না থাকলে তৈরি করে, আর থাকলে সেটিকে সম্পূর্ণভাবে ওভাররাইট করে। প্রতিস্থাপনের বদলে একটি ফাইলে যোগ করতে, fs.appendFileSync() ব্যবহার করুন।
Sync-এ শেষ হওয়া প্রতিটি মেথড প্রোগ্রামটিকে ব্লক করে — ফাইল অপারেশন শেষ না হওয়া পর্যন্ত আর কিছু চলে না। একটি দ্রুত স্ক্রিপ্টের জন্য এটি ঠিক আছে। একসাথে অনেক রিকোয়েস্ট হ্যান্ডেল করা একটি চলমান সার্ভারের জন্য, ডিস্ক অ্যাক্সেসে ব্লক হওয়া অন্য প্রতিটি রিকোয়েস্টকেও থামিয়ে দেয়।
নন-ব্লকিং ভার্সনটি সরাসরি একটি মান ফেরত দেওয়ার বদলে একটি callback ফাংশন নেয়:
fs.readFile('notes.txt', 'utf8', (err, data) => {
if (err) {
console.error('Failed to read file:', err)
return
}
console.log(data)
})ফাইলটি পড়া হওয়ার সময় Node অন্য কোড চালাতে থাকে, আর এটি শেষ হলে আপনার পাস করা ফাংশনটি কল করে। এই callback প্যাটার্ন — প্রথম দুই প্যারামিটার হিসেবে (err, result) — Node-এর বিল্ট-ইন API জুড়ে দেখা যায়।
fs/promises একটি callback-এর বদলে async/await দিয়ে একই নন-ব্লকিং আচরণ দেয়:
const fs = require('fs/promises')
async function readNotes() {
const data = await fs.readFile('notes.txt', 'utf8')
console.log(data)
}
readNotes()| স্টাইল | কীভাবে কল করবেন | প্রোগ্রাম ব্লক করে? |
|---|---|---|
fs.readFileSync() | সরাসরি মান ফেরত দেয় | হ্যাঁ |
fs.readFile() | একটি callback নেয় | না |
fs/promises-এর readFile() | await করা যায় | না |
বাস্তব কোডে ডিফল্টভাবে promise-ভিত্তিক ভার্সনের দিকে যান — এটি নন-ব্লকিং আর async/await দিয়ে পরিষ্কারভাবে পড়া যায়। Sync মেথড এক-বারের স্ক্রিপ্ট আর স্টার্টআপ কোডের জন্য ঠিক আছে যেগুলোর সত্যিই অন্য কিছু চলার আগে শেষ হওয়া প্রয়োজন।
if (fs.existsSync('config.json')) {
console.log('Found it')
}