اگه از اون دسته دولوپرایی هستی که اهل استفاده از کد های سنکرون در کنار آسنکرون هستی، اگه یه همچین کدی میزنی:
if (fs.existsSync('path-to-file')) { fs.appendFile('path-to-file', 'data++', error => console.error(error)); };
باید بگم من همچین کدی نمیزنم. چراکه معتقد هستم نباید تو نود.جیاس پروسه رو بلاک کرد.
برای این موضوع شما دو راه داری:
اینجی من میام از خود نود.جیاس استفاده میکنم. خب برای این کار شما میتونی از fs.stat و fs.access استفاده بکنم. ولی اگه میخوای به پیشنهاد دولوپرای خود نود.جیاس عمل بکنید بهتره که این کارو نکنید. یعنی اگه میخوای یکی از عملیات های write/delete/read رو انجام بدی بهتره بری سمت ارور هندلینگ تا اینکه بیای یه لاجیک دیگه اضافه بکنی. مثلا تو یه تابع این کد رو مینویسی:
try { let publicKey = await fsPromises.readFile('id_rsa_public.pem'); let privateKey = await fsPromises.readFile('id_rsa_private.pem'); return { publicKey, privateKey }; } catch (error) { if(error.code === 'ENOENT') { let keyPair = await generateKeyPair('rsa', { privateKeyEncoding: { type: 'pkcs1', format: 'pem' }, publicKeyEncoding: { type: 'pkcs1', format: 'pem' }, modulusLength: 4096, }); await fsPromises.writeFile(path.join(__dirname, 'id_rsa_public.pem'), keyPair.publicKey); await fsPromises.writeFile(path.join(__dirname, 'id_rsa_private.pem'), eyPair.privateKey); return { publicKey, privateKey }; }; };
به جای اینکه چک کنم فایل وجو داره یا نه اومدم ارور رو هندل کردم. هر چند این روش برای خودمم عجیبه ولی به نظرم اگه با ورژن callback ای readFile استفاده بشه قشنگ تر و ساده تر میشه.
دستور readdir میاد محتوای فایل رو میخونه و بر میگردونه. یه مسیری بهش میدی با یسری آپشن.
میتونه یه URL یا بافر یا رشته میتونه باشه که مشخص میکنه فایل کجاست.
مورد اول encoding هست که یه رشته میگیره و مقدار پیشفرض اون utf8 هست. مورد بعدی withFileTypes هست که مشخص میکنه فایل برگشت داده شده باید به عنوان آبجکت های fs.Dirent برگردونده بشه.
نمایش دادن محتوای دایرکتوری به صورت فایل ها و subdirectory ها. وقتی که fs.readdir میکنی و withFileTypes رو true میزاری مقدار بازگشتی یک نمونه از این کلاس هست.
const { promises: fsPromises } = require('fs'); (async _ => { let res = await fsPromises.readdir('.', { withFileTypes: true }); console.log(res[0].name); console.log(res[0].isDirectory()); console.log(res[0].isFile()); })();
با این دستور میای اسم فایل/دایرکتوری رو بعلاوه چندین متد سودمند دیگه بدست میاری.