آموزش ماژول FS در Node.js + معرفی دوره آموزشی

۴۲۳ بازدید
آخرین به‌روزرسانی: ۰۱ خرداد ۱۴۰۲
زمان مطالعه: ۱۷ دقیقه
آموزش ماژول FS در Node.js + معرفی دوره آموزشی

زبان برنامه نویسی جاوا اسکریپت مدت زمان زیادی است که از بهترین زبان‌های برنامه نویسی محسوب می‌شود، اما برای این زبان در ابتدا محدودیت‌هایی در توسعه سمت سرور وجود داشت. با ورد «نود جی اس» (Node.js) این محدودیت از بین رفت و هم‌اکنون با استفاده از آن توسعه برنامه‌های سمت سرور با جاوا اسکریپت کاملاً فراهم است. در این مطلب از مجله فرادرس در مورد ماژول FS در Node.js که به عنوان «سیستم فایل» (File System) نود جی اس از آن یاد می‌شود، توضیحاتی مطلوبی همراه با مثال‌های عملی برای هر بخش ارائه خواهد شد. قبل از اینکه از این ماژول FS در نود جی اس سخن به میان آید ابتدا بهتر است در مورد خود نود جی اس و رسالت آن در دنیای توسعه وب توضیحاتی مختصر ارائه شود.

فهرست مطالب این نوشته
997696

مقدمه و پیش درآمد آموزش ماژول FS در Node.js

در این بخش ابتدا برخی از پیش‌نیازها و مقدمات لازم برای آموزش ماژول FS در Node.js به طور خلاصه شرح داده می‌شود و سپس بلافاصله به سراغ بحث اصلی خواهیم رفت. لازم است در اینجا به این نکته اشاره شود که برای آموزش ماژول FS در Node.js یک دوره آموزشی اختصاصی در پلتفرم فرادرس تولید و ارائه شده است که در صورت تمایل مخاطبان می‌توانند برای یادگیری ماژول FS در Node.js از آن استفاده کنند.

نود جی اس چیست؟

Node.js نوعی محیط زمان اجرای جاوا اسکریپت منبع آزاد به حساب می‌آید که می‌تواند به صورت رایگان در سیستم‌عامل‌های اصلی مانند ویندوز، مک و لینوکس دانلود و نصب شود. محبوبیت آن در سال‌های اخیر به‌شدت افزایش یافته است و فرصت‌های هیجان‌انگیزی را برای توسعه‌دهندگان جاوا اسکریپت که به دنبال توسعه برنامه‌های سمت سرور هستند، ارائه می‌دهد.

با Node.js می‌توان از جاوا اسکریپت برای برنامه نویسی سمت کلاینت و برنامه نویسی سمت سرور استفاده کرد. این بدان معناست که می‌توان برنامه‌های سریع، مقیاس‌پذیر و کارآمد را با استفاده از زبانی واحد توسعه داد. معماری رویداد محور Node.js امکان برنامه نویسی ناهمگام در جاوا اسکریپت را فراهم و این ویژگی آن را برای مدیریت اتصالات هم‌زمان و برنامه‌های بلادرنگ به گزینه‌ای عالی تبدیل می‌کند.

آموزش نود جی اس فرادرس

Node.js به توسعه‌دهندگان جاوا اسکریپت این قدرت را می‌دهد تا مهارت‌های خود را گسترش دهند و طیف گسترده‌ای از برنامه‌های سمت سرور را بسازند. تطبیق‌پذیری و سهولت استفاده از آن، نود جی اس را به گزینه‌ای مناسب برای سازندگان اپلیکیشن تبدیل کرده و راه را برای چشم‌انداز شغلی جدیدی را در زمینه برنامه نویسی جاوا اسکریپت هموار کرده است.

در ادامه این مطلب به رسالت ماژول FS در Node.js یا به عبارتی به سیستم مدیریت فایل در Node.js پرداخته خواهد شد. با APIهایی که نود جی اس در اختیار توسعه‌دهندگان قرار می‌دهد، پیمایش در سیستم فایل به سرعت انجام خواهد شد و توسعه‌دهنده قادر است تا بسیاری از عملیات پیچیده را بدون زحمت انجام دهد. تسلط بر این مهارت‌ها، نه تنها بهره‌وری توسعه‌دهنده را افزایش می‌دهد، بلکه به او قدرت خواهد داد تا از پتانسیل کامل تعاملات سیستم فایل نیز استفاده کند.

پیش نیازهای آموزش ماژول FS در Node.js کدامند؟

قبل از ورود به دنیای سیستم فایل Node.js، چند پیش‌نیاز وجود دارد که باید آن‌ها در نظر داشت. اول از همه، باید Node.js را روی سیستم‌عامل خود نصب کرد. شگفتی Node.js در سادگی آن نهفته است، زیرا می‌توان آن را به راحتی دانلود و بدون نیاز به سخت‌افزار پیچیده بر روی کامپیوتر با سیستم‌عامل‌های مختلف نصب کرد. علاوه بر این، داشتن درک اولیه از جاوا اسکریپت برای کار با ماژول‌های Node.js مانند سیستم فایل FS ضروری است. همچنین آشنایی با مفاهیمی مانند توابع جاوا اسکریپت، توابع «فراخوانی» (Callback) و «وعده‌ها» (Promise) در جاوا اسکریپت، درک کاربران از این موضوع را تسریع می‌کند و به آن‌ها این امکان را می‌دهد که از ماژول اف اس در Node.js نهایت استفاده را ببرند.

ماژول FS در Node.js

در توسعه برنامه‌های فول‌استک، مدیریت فایل‌ها و دایرکتوری‌ها ضرورتی اساسی است. خواه برنامه به کاربران امکان آپلود تصاویر، رزومه‌ها یا فایل‌های دیگر را در سرور بدهد یا برنامه نیاز به توانایی خواندن فایل‌های پیکربندی، جابجایی فایل‌ها یا حتی تغییر مجوزهای آن‌ها را به صورت برنامه‌ای داشته باشد، مدیریت سیستم فایل نقش مهمی ایفا می‌کند.

خوشبختانه، با ماژول FS در نود جی اس تمام این وظایف به طور یکپارچه انجام می‌شوند. این ماژول قدرتمند طیف وسیعی از APIها را ارائه می‌دهد که به توسعه‌دهنده این امکان را خواهتد داد تا بدون زحمت با سیستم‌های فایل تعامل داشته باشد. APIها ابزارهایی همه‌کاره هستند و گزینه‌ها و پیکربندی‌های قابل تنظیمی را برای انجام عملیات با نیازهای خاص برنامه ارائه می‌دهند.

پیش نیازهای ماژول FS در Node.js

علاوه بر این، بسته به نیاز برنامه، این امکان وجود دارد که از عملیات فایل «ناهمگام» (Asynchronous) و «همگام» (Synchronous) استفاده شود. قبل از عمیق‌تر شدن در ماژول فایل سیستم در نود جی اس، نگاهی گذرا بر خود مفهوم ماژول Node.js خالی از لطف نیست.

 

ماژول نود جی اس چیست؟

ماژول‌های Node.js به عنوان گنجینه‌ای از عملکردهای قدرتمند ارائه شده از طرف API‌ها، آماده استفاده به وسیله برنامه‌های مصرف کننده هستند. به عنوان مثال، ماژول FS در نود جی اس به توسعه‌دهنده اجازه می‌دهد تا به طور یکپارچه با سیستم فایل تعامل داشته باشد. به طور مشابه، «ماژول HTTP» دامنه‌ای از امکانات را باز می‌کند و توسعه‌دهنده را قادر می‌سازد سروری ایجاد کرده و عملیات مختلف دیگر را انجام دهد.

با Node.js، مجموعه‌ای از ماژول‌ها در دسترس هستند که پیچیدگی‌های سطح پایین توسعه برنامه را از بین می‌برند و به کاربران این قدرت را می‌دهند تا روی توسعه قسمت‌های اصلی و کاربردی برنامه تمرکز کنند. از Node.js نسخه «١۴» به بعد، توسعه‌دهندگان آزادی ایجاد و استفاده از ماژول‌های Node.js را به دو روش مجزا در اختیار دارند: «ماژول‌های CommonJS» یا همان CJS و «ESM» یا همان «MJS» روش‌های نام برده هستند. در این مطلب، در درجه اول سبک CommonJS بررسی خواهد شد و اینجا، جایی است که جادوی «برنامه نویسی ماژولار» (Modular Programming) را از نزدیک خواهیم دید.

آموزش ماژول FS در فریمورک Node.js

آموزش ماژول FS در Node.js

این بخش مخصوص کار با فایل‌ها در Node.js است. این شامل انجام عملیات مختلف بر روی فایل‌ها و دایرکتوری‌ها (پوشه‌ها) خواهد بود. برای شروع کار، باید ماژول FS را به فایل منبع وارد کرد.

در شیوه یا سبک CommonJS با استفاده از متد require می‌توان به این مهم دست پیدا کرد. مثال زیر مفهوم گفته‌ شده را بیان می‌کند.

1const { writeFile } = require('fs/promises');

در «سینتکس» (Syntax) بالا به طور خاص، متد writeFile از بسته FS/promises ایمپورت شده است. همچنین در قطعه کد بالا از «متدهای وعده» (Promises Method) در جاوا اسکریپت استفاده شده، زیرا آن‌ها جدیدترین موارد اضافه شده به ماژول FS در Node.js هستند. آن‌ها راحتی کار کردن یکپارچه با کلمات کلیدی async/wait را ارائه می‌دهند که منجر به کدهای واضح‌تر و مختصرتر می‌شود. علاوه بر متدهای وعده، گزینه‌های جایگزین دیگر مانند متدهای هم‌زمان synchronous و توابع callback نیز در مثال‌های بعدی بررسی خواهند شد.

نحوه ایجاد و نوشتن با ماژول اف اس در Node.js

فایل را می‌توان با سه متد مختلف ایجاد کرد و در آن نوشت. این سه متد به صورت موارد زیر هستند:

  • متدwriteFile
  •  متدappendFile
  • متدopenFile

مهم نیست که کدام رویکرد استفاده می‌شود. برای این کار باید به سادگی مسیر فایل و محتوای مورد نظر را برای نوشتن ارائه داد. اگر فایل از قبل وجود داشته باشد، این متدها به‌خوبی جایگزین محتوای موجود آن می‌شوند. از سوی دیگر، اگر فایل هنوز ساخته نشده است، این متدها به طور یکپارچه فایلی جدید ایجاد می‌کنند.

 

استفاده از متد writeFile برای نوشتن و ایجاد فایل

قطعه کد زیر استفاده از متد writeFileرا برای ایجاد و نوشتن در فایل نشان می‌دهد. برای انجام این کار باید فایلی به نام فرضی createFile.js به منظور اجرای کد مربوطه ایجاد شود.

1const { writeFile } = require('fs/promises');
2async function writeToFile(fileName, data) {
3  try {
4    await writeFile(fileName, data);
5    console.log(`Wrote data to ${fileName}`);
6  } catch (error) {
7    console.error(`Got an error trying to write the file: ${error.message}`);
8  }
9}

در مثال فوق از کلمه کلیدی await برای فراخوانی متد استفاده شده است، زیرا یک «Promise» یا همان «وعده» جاوا اسکریپت را برمی‌گرداند. وعده موفق باعث انجام عمل ایجاد و نوشتن در فایل می‌شود. همچنین در قطعه کد بالا، بلوک try-catch برای رسیدگی به خطاها در صورت رد شدن وعده استفاده شده است. اکنون می‌توان تابع writeToFile را به صورت زیر فراخوانی کرد.

1writeToFile('test.txt', 'سلام. به مجله فرادرس خوش آمدید');

اکنون با باز کردن ترمینال و اجرای دستور زیر، عملیات انجام خواهد شد.

1node createFile.js

حال فایلی به نام test.txt با دستور فوق به صورت زیر تولید شده که حاوی جمله یا متن مد نظر ما است.

ماژول fs در نود جی اس

استفاده از متد appendFile برای ایجاد و نوشتن در فایل

همان‌طور که از نام آن معلوم است، استفاده اصلی از این متد برای افزودن یا ویراش فایل مدنظر خواهد بود ولی با این حال می‌توان از آن برای ایجاد فایل هم استفاده کرد.

برای مثال در تابع زیر از متد appendFile برای نوشتن در فایلی با پرچم w به معنای «نوشتن» (Write) استفاده شده است.

1const { appendFile} = require('fs/promises');
2
3async function appendToFile(fileName, data) {
4  try {
5    await appendFile(fileName, data, { flag: 'w' });
6    console.log(`Appended data to ${fileName}`);
7  } catch (error) {
8    console.error(`Got an error trying to append the file: {error.message}`);
9  }
10}

اکنون می‌توان تابع فوق را به صورت زیر فراخوانی کرد:

1appendToFile('test1.txt', 'آموزش ماژول سیستم مدیریت فایل در نود جی اس - مجله فرادرس');

حال این بار با اجرای دستور node createFile.js فایلی جدید به نام text1.js ایجاد خواهد شد که حاوی محتوای زیر است:

سیستم مدیریت فایل در نود جی اس

استفاده از متد open برای ایجاد و نوشتن در فایل

آخرین متدی که برای ایجاد و نوشتن روی فایل در ماژول اف اس در Node.js بررسی خواهد شد، متد open است.

می‌توان فایل را با استفاده از پرچم w (برای نوشتن) باز کرد که مثال زیر این موضوع را بیان می‌کند.

1const { open} = require('fs/promises');
2
3async function openFile(fileName, data) {
4  try {
5    const file = await open(fileName, 'w');
6    await file.write(data);
7    console.log(`Opened file ${fileName}`);
8  } catch (error) {
9    console.error(`Got an error trying to open the file: {error.message}`);
10  }
11}

حال می‌توان تابع را به صورت زیر فراخوانی کرد:

1openFile('test2.txt', 'آموزش نود جی اس رایگان - مجله فرادرس');

اکنون با جرای دستور node createFile.js در ترمینال خروجی به صورت زیر در فایل جدیدی به نام test2.txt تولید خواهد شد.

نحوه کار با ماژول fs در node.js

نحوه خواندن فایل با ماژول FS در Node.js

تا به اینجا، آموزش ایجاد و همچنین نوشتن در فایل با ماژول FS در نود جی اس آموزش داده شد و حال نوبت به آموزش خواندن فایل با آن است. این کار با استفاده از متد readFile در سیستم مدیریت فایل نود جی اس امکان‌پذیر است.

در ادامه مثالی برای این هدف بیان خواهد شد. برای این منظور ابتدا باید فایلی با نام فرضی readThisFile.js ساخته و قطعه کد زیر در آن قرار داده شود.

1// readThisFile.js
2const { readFile } = require('fs/promises');
3async function readThisFile(filePath) {
4  try {
5    const data = await readFile(filePath);
6    console.log(data.toString());
7  } catch (error) {
8    console.error(`Got an error trying to read the file: {error.message}`);
9 }
10}

حالا هر سه فایلی خوانده خواهند شد که قبلاً با فراخوانی تابع readThisFile ایجاد شده بودند. قطعه کد فراخوانی تابع به صورت زیر است.

1readThisFile('test.txt');
2readThisFile('test1.txt');
3readThisFile('test2.txt');

اکنون با اجرای دستور node readThisFile.js ، خروجی به صورت تصویر زیر نمایان خواهد شد.

خواندن فایل با ماژول FS در Node.js

توجه به این نکته ضروری است که متد readFile فایل را به صورت ناهم‌زمان می‌خواند. در نتیجه، ترتیب خواندن فایل و ترتیب دریافت پاسخ برای چاپ در کنسول ممکن است یکسان نباشد. برای اطمینان از ترتیب مورد نظر، باید از نسخه هم‌زمان متد readFileاستفاده کرد.

تغییر نام فایل با ماژول اف اس در نود جی اس چگونه انجام می شود؟

بحث مهم دیگر در این آموزشِ ماژول FS در Node.js، بحث تغییر نام فایل است. برای تغییر نام فایل، از متُدی به نام rename به منظور تغییر نام در ماژول FS استفاده خواهد شد.

برای مثال اگر فایلی با نام فرضی Faradars.tex وجود داشته باشد و بخواهیم نام آن را تغییر دهیم، باید به صورت زیر عمل کرد.

1const { rename } = require('fs/promises');
2
3async function renameFile(from, to) {
4  try {
5    await rename(from, to);
6    console.log(`Renamed ${from} to ${to}`);
7  } catch (error) {
8    console.error(`Got an error trying to rename the file: ${error.message}`);
9  }
10}

قطعه کد بالا در فایلی با نام فرضی renameFile.js ذخیره شده است. طبق قطعه کد بالا، متد rename دو آرگومان می‌گیرد. یکی فایل با نام منبع و دیگری فایل با نام فایل مقصد است. حال تابع بالا برای تغییر نام فایل به صورت زیر فراخوانی خواهد شد.

1const oldName = "Faradars.txt";
2const newName = "blog.Faradars.txt";
3renameFile(oldName, newName);

اکنون با اجرای دستور node renameFile.js در ترمینال خروجی به صورت زیر خواهد بود و فایل از Faradars.txt به blog.Faradars.txt تغییر نام پیدا خواهد کرد.

آموزش رایگان فایل سیستم نود جی اس

انتقال فایل با ماژول FS در Node JS

برای انتقال فایل از یک دایرکتوری به دایرکتوری دیگر، می‌توان از متُد rename استفاده کرد که در این جا اساساً فقط مسیر فایل را تغییر نام می‌دهد. در این حالت، انتقال فایل با تغییر نام مسیر آن به مقصد مورد نظر حاصل می‌شود.

برای نشان دادن این موضوع، باید مراحل زیر را دنبال کرد:

  1. دو پوشه به نام‌های «from » و «to » در مسیر مورد نظر برای مثال باید ایجاد شوند.
  2. در داخل پوشه «from»، باید فایلی به نام «move-me.txt » ساخت.
  3. همچنین فایلی به نام moveFile.js ایجاد و قطعه کد زیر را به آن باید اضافه کرد.
1const { rename } = require('fs/promises');
2const { join } = require('path');
3async function moveFile(from, to) {
4  try {
5    await rename(from, to);
6    console.log(`Moved ${from} to ${to}`);
7  } catch (error) {
8    console.error(`Got an error trying to move the file: ${error.message}`);
9  }
10}

در قطعه کد ارائه شده بالا، متد join از ماژول path ایمپورت شده است، زیرا این کار به کاربر امکان می‌دهد تا مسیرهای فایل معتبری را با پیوستن چندین بخش مسیر به یکدیگر بسازد. ماژول pathنوعی ماژول داخلی در Node.js است که ابزارهایی را برای کار با مسیرهای فایل و دایرکتوری ارائه می‌دهد.

با استفاده از متد join، می‌توان مطمئن شد که مسیرهای فایل‌های مبدأ و مقصد بدون در نظر گرفتن سیستم‌عامل زیربنایی به درستی شکل گرفته‌اند. سیستم‌عامل‌های مختلف از قراردادهای متفاوتی برای نمایش مسیرهای فایل استفاده می‌کنند، مانند استفاده از «اسلش‌های رو به جلو» (/) یا «اسلش‌های رو به عقب» () به عنوان جداکننده و متد joinاز این تفاوت‌ها مراقبت می‌کند و مسیری معتبر تولید خواهد کرد که به طور مداوم در بین پلتفرم‌های مختلف کار می‌کند.

1const fromPath = join(__dirname, "from", "move-me.txt");
2const destPath = join(__dirname, "to", "move-me.txt");
3moveFile(fromPath, destPath);

حال اگر اسکریپت moveFile.js با دستور Nod moveFile.js اجرا شود، فایل move-me.txt از دایرکتوری From به دایرکتوری to منتقل خواهد شد.

FS در فریمورک نود جی اس

کپی کردن فایل با ماژول FS در نود جی اس

این بخش از آموزش ماژول FS در Node.js مختص نحوه کپی کردن فایل است. برای این هدف از متد copyFile از ماژول FS برای کپی کردن فایل از مبدا به مقصد استفاده خواهد شد.

قطعه کد زیر به منظور آموزش این عملیات ارائه شده است.

1const { copyFile } = require('fs/promises');
2const { join } = require('path');
3async function copyAFile(from, to) {
4  try {
5    await copyFile(from, to);
6    console.log(`Copied ${from} to ${to}`);
7  } catch (err) {
8    console.error(`Got an error trying to copy the file: ${err.message}`);
9  }
10}

حال می‌توان عمل کپی را به صورت زیر انجام داد:

1copyAFile('test.txt', 'test-copy.txt');

با اجرای دستور node copyFile.js کد بالا محتوای test.txt را در فایل test-copy.txt کپی می‌کند. این یعنی فایل جدیدی به نام test-copy.txtایجاد خواهد شد که حاوی محتوای test.txtاست.

آموزش نود جی اس فرادرس

روش گفته شده فقط برای انجام عملیات کپی روی یک فایل است. حال در ادامه، اجرای این عمل برای چندین فایل به صورت هم‌زمان آموزش داده خواهد شد. برای این هدف می‌توان از Promise.all API برای اجرای هم‌زمان چندین وعده به صورت زیر استفاده کرد.

1async function copyAll(fromDir, toDir, filePaths) {
2  return Promise.all(filePaths.map(filePath => {
3   return copyAFile(join(fromDir, filePath), join(toDir, filePath));
4  }));
5}

حال می‌توان ارائه تمام مسیرهای فایل را برای کپی کردن از یک دایرکتوری به دایرکتوری دیگر به صورت زیر انجام داد.

1copyFiles('from', 'to', ['copyA.txt', 'copyB.txt']);

همچنین می‌توان از این روش برای انجام عملیات دیگری مانند انتقال، نوشتن و خواندن فایل‌ها به صورت هم‌زمان استفاده کرد.

 

حذف فایل با ماژول FS در Node.js

برای حذف فایل با استفاده از ماژول FS در Node.js می‌توان از متد unlink به صورت زیر استفاده کرد:

1const { unlink } = require('fs/promises');
2async function deleteFile(filePath) {
3  try {
4    await unlink(filePath);
5    console.log(`Deleted ${filePath}`);
6  } catch (error) {
7    console.error(`Got an error trying to delete the file: ${error.message}`);
8  }
9}

اکنون با افزودن قطعه کد زیر به کدهای بالا و با اجرای دستور مربوطه در ترمینال فایل مد نظر از دایرکتوری حذف خواهد شد.

1deleteFile('delete-me.txt');

نحوه تغییر مجوزها و مالکیت فایل با ماژول FS

اگر نیاز به تغییر مجوزهای فایل وجود داشته باشد، می‌توان از متد chmod از ماژول FS/promises در Node.js استفاده کرد. این متد به کاربر اجازه می‌دهد تا مجوزهای فایل را تغییر دهد.

در زیر نمونه کدی آورده شده است که نحوه تغییر مجوزهای فایل را با استفاده از متد chmodنشان می‌دهد.

1const { chmod } = require('fs/promises');
2async function changePermission(filePath, permission) {
3  try {
4    await chmod(filePath, permission);
5    console.log(`Changed permission to ${permission} for ${filePath}`);
6  } catch (error) {
7    console.error(`Got an error trying to change permission: ${error.message}`);
8  }
9}

برای این هدف، باید مطمئن شد که مجوزهای لازم برای اصلاح فایل را داشته و مسیر فایل صحیح است. مقدار مجوز باید با استفاده از نماد بیتی که نشان دهنده مجوزهای فایل مورد نظر است، مشخص شود.

1changePermission('permission.txt', 0o400);

خروجی قطعه کد بالا با اجرای node chmod.js به صورت زیر خواهد بود:

تغییر مجوز فایل با ماژول FS

مشابه مجوز فایل، همچنین می‌توان مالکیت فایل را با ماژول FS در نود جی اس تغییر داد. برای این هدف از متدی به نام chown به صورت زیر استفاده خواهد شد.

1const { chown } = require('fs/promises');
2
3async function changeOwnership(filePath, userId, groupId) {
4  try {
5    await chown(filePath, userId, groupId);
6    console.log(`Changed ownership to ${userId}:${groupId} for ${filePath}`);
7  } catch (error) {
8    console.error(`Got an error trying to change ownership: ${error.message}`);
9  }
10}

سپس تابع باید با مسیر فایل، شناسه کاربری و شناسه گروه به صورت زیر فراخوانی شود.

1changeOwnership('ownership.txt', 1000, 1010);

حال با اجرای دستور node chown.js در ترمینال مالکیت فایل تغییر خواهد کرد.

آموزش کار با فایل در نود جی اس

نحوه ایجاد پیوند با ماژول FS در Node.js

برای ایجاد «پیوندی نمادین» (Symlink) با استفاده از ماژول سیستم فایل Node.js، می‌توان از متد symlink استفاده کرد. این متد به کاربران امکان می‌دهد پیوندی به فایل یا پوشه مورد نظر ایجاد کنند.

در اینجا قطعه کد نحوه ایجاد پیوند نمادین با استفاده از متد symlinkآورده شده است.

1const { symlink } = require('fs/promises');
2const { join } = require('path');
3async function createSymlink(target, path, type) {
4  try {
5    await symlink(target, path, type);
6    console.log(`Created symlink to ${target} at ${path}`);
7  } catch (error) {
8    console.error(`Got an error trying to create the symlink: ${error.message}`);
9  }
10}

در قطعه کد بالا، تابع createSymlink تعریف شده است که سه پارامتر target ،path  و type را می‌گیرد.

  1. پارامتر targetنشان دهنده مسیر فایل یا پوشه مورد نظر است که کاربر می‌خواهد پیوندی نمادین برای آن ایجاد کند.
  2. pathنشان دهنده مسیری است که کاربر می‌خواهد پیوند را در آن ایجاد کند.
  3. پارامتر typeنوع رابط پیوندی را مشخص خواهد کرد که باید ایجاد شود. نوع آن می‌تواند «file» یا «dir» باشد.

در داخل تابع، متد symlinkبه صورت ناهم‌زمان با استفاده از await برای ایجاد پیوند بر اساس پارامترهای ارائه شده فراخوانی می‌شود. در صورت موفقیت آمیز بودن عملیات، پیام موفقیت آمیز در کنسول چاپ و اگر خطایی رخ دهد، پیام خطا ثبت می‌شود.

حال با استفاده از تابع زیر پیوند فرضی ایجاد خواهد شد.

1createSymlink('join(__dirname, from, symMe.txt)', 'symToFile', 'file');

حال با اجرای دستور مربوط‌ه در ترمینال، پیوند نمادین یا فرضی ایجاد خواهد شد.

نحوه مشاهده تغییرات فایل با ماژول FS در نود جی اس

برای مشاهده تغییرات روی فایل در Node.js، می‌توان از متد watch ارائه شده به وسیله ماژول سیستمِ فایلِ نود جی اس استفاده کرد. این متد به کاربران امکان می‌دهد تغییرات و رویدادها را نظارت کنند و راهی را به منظور ضبط و ممیزی آن‌ها برای بررسی بعدی فراهم می‌کند. اگرچه متدی جایگزین به نام watchFile برای این کار نیز وجود دارد، اما به اندازه متد watchکارآمد نیست.

تا کنون در این آموزش ماژول اف اس در Node.js از کلمات کلیدی async/wait استفاده شده است، حال در این جا استفاده از تابع callback با مثالی در ادامه بررسی خواهد شد. با استفاده از متد watch، می‌توان مسیر فایل و تابع callbackرا به عنوان آرگومان ارسال کرد. هر زمان که فعالیتی در فایل رخ می‌دهد، تابع callbackبه طور خودکار فراخوانی می‌شود. قطعه کد آنچه که گفته شد به صورت زیر است.

1const fs = require('fs');
2function watchAFile(file) {
3  fs.watch(file, (event, filename) => {
4    console.log(`${filename} file Changed`);
5  });
6}

پارامتر رویداد ارائه شده به تابع callbackبه کاربر امکان می‌دهد اطلاعات بیشتری در مورد فعالیت‌های خاصی که انجام شده است جمع‌آوری کند. می‌توان از آن برای تشخیص تغییر، تغییر نام یا حتی پیگیری حذف فایل نیز استفاده کرد.

در کدهای بالا و در داخل تابع، متد FS.watch فراخوانی می‌شود که پارامتر فایل و یک تابع callbackرا به عنوان آرگومان ارسال می‌کند. وقتی هر فعالیتی مانند تغییر، تغییر نام یا حذف روی فایل رخ می‌دهد، تابع پاسخ به callbackارائه شده فعال می‌شود. تابع callbackدو پارامتر را دریافت می‌کند: رویداد و نام فایل. پارامتر رویداد به کاربر در مورد نوع فعالیتی که رخ داده است اطلاع می‌دهد، در حالی که پارامتر filename نام فایل مرتبط با رویداد را ارائه خواهد داد.

با استفاده از این رویکرد، هر زمان که یک رویداد تغییر در فایل مشاهده شده شناسایی شود، تابع callbackفراخوانی می‌شود و پیامی را نشان می‌دهد مبنی بر اینکه که کدام فایل تغییر کرده است. حال با ارسال نام فایل مد نظر به عنوان آرگومان، عملیات بازبینی تغییرات انجام خواهد شد.

1watchAFile('test.txt');

حال با اجرای دستور node watc.js قطعه کد بالا اجرا خواهد شد و تغییرات صورت گرفته برای فایل test  به صورت زیر قابل مشاهده خواهد بود.

سیستم مدیریت فایل در node.js

کار با پوشه ها در ماژول FS نود جی اس

کار با «دایرکتوری‌ها» (پوشه‌ها) در Node.js راهی عالی برای مدیریت داده‌ها و فایل‌ها است. با متدها و عملیات مناسب، می‌توان به راحتی پوشه‌ها را تغییر نام داد و یا آن‌ها را منتقل و کپی کرد. علاوه بر این، عملیات منحصربه‌فردی به طور خاص برای دایرکتوری‌ها وجود دارد که در این بخش از آموزش ماژول FS در Node.js به آن خواهیم پرداخت.

ساخت پوشه جدید با ماژول FS در نود جی اس

برای ساخت دایرکتوری جدید در ماژول FS از متد mkdir استفاده می‌شود. برای این هدف باید نام دایرکتوری مد نظر را به عنوان آرگومان ارسال کرد. قطعه کد انجام این کار به صورت زیر است.

1const { mkdir } = require('fs/promises');
2async function createDirectory(path) {
3  try {
4    await mkdir(path);
5    console.log(`Created directory ${path}`);
6  } catch (error) {
7    console.error(`Got an error trying to create the directory: ${error.message}`);
8  }
9}

اکنون می‌توان تابع createDirectory را با مسیر دایرکتوری به صورت زیر فراخوانی کرد.

1createDirectory('Test-directory');

حال با اجرای دستور node Createdirectory.js ، پوشه جدید به صورت زیر ساخته خواهد شد.

آموزش FS در نود جی اس

ایجاد دایرکتوری موقت با ماژول اف اس در Node.js

ایجاد دایرکتوری موقت با ماژول FS در نود جی اس نیز بسیار آسان است. برای این کار می‌توان از متد mkdtemp()‎ استفاده کرد. برای این هدف باید محل دایرکتوری سیستم عامل را با استفاده از متد tmpdir()‎ از ماژول os استفاده کرد.

هنگامی که مسیر دایرکتوری موقت یافت شد، از متد ‎mkdtemp()‎برای ایجاد پوشه موقت جدید می‌توان استفاده کرد. با این کار می‌توان به راحتی دایرکتوری موقت با ماژول FS ایجاد کرد.

1const { mkdtemp } = require('fs/promises');
2const { join } = require('path');
3const { tmpdir } = require('os');
4async function createTemporaryDirectory(fileName) {
5  try {
6    const tempDirectory = await mkdtemp(join(tmpdir(), fileName));
7    console.log(`Created temporary directory ${tempDirectory}`);
8  } catch (error) {
9    console.error(`Got an error trying to create the temporary directory: ${error.message}`);
10  }
11}

حال با فراخوانی تابع زیر و اجرای دستور node Temprary-Directory.js در ترمینال، پوشه موقت به صورت زیر ایجاد خواهد شد.

1createTemporaryDirectory('node-temp-file-');
ماژول FS در نود جی اس چیست؟

نکته: همان‌طور که در تصویر بالا قابل مشاهده است، Node.js شش کاراکتر تصادفی را در انتهای نام پوشه موقت ایجاد شده اضافه می‌کند تا آن را منحصربه‌فرد نگه دارد.

حذف دایرکتوری با ماژول سیستم فایل در نود جی اس

حذف دایرکتوری با ماژول FS با استفاده از متد‎ rmdir() امکان‌پذیر است و قطعه کد انجام این کار در ادامه آمده است.

1const { rmdir } = require('fs/promises');
2async function deleteDirectory(path) {
3  try {
4    await rmdir(path);
5    console.log(`Deleted directory ${path}`);
6  } catch (error) {
7    console.error(`Got an error trying to delete the directory: ${error.message}`);
8  }
9}

با فراخوانی تابع زیر و ارسال نام پوشه به عنوان آرگومان، امکان حذف پوشه با ماژول FS در نود جی اس فراهم خواهد شد.

1deleteDirectory('new-directory-renamed');

حال با اجرای دستور مربوطه، پوشه یا دایرکتوری مد نظر حذف خواهد شد.

API های هم زمان و ناهمزمان

APIهای هم‌زمان و ناهم‌زمان دو نوع متد متفاوتی هستند که به وسیله آن‌ها برنامه می‌تواند به داده‌ها دسترسی داشته باشد.

API‌های ناهم‌زمان را می‌توان زمانی استفاده کرد که نیاز به پردازش موازی عملیات داشته باشیم و برای ادامه عملیات بعدی نیازی به خروجی عملیاتی دیگر ندارد. به عنوان مثال، هنگام کار با ماژول FS در محیط زمان اجرای Node.js، می‌توان از متد‌های async مانند readFile()‎ برای پردازش هم‌زمان چندین فایل استفاده کرد.

از سوی دیگر، APIهای هم‌زمان وقتی استفاده می‌شوند که مانند هنگام خواندن چندین فایل، کاربر نیاز داشته باشد عملیات را یکی پس از دیگری پردازش کند. در این حالت می‌توان از متد readFileSync() ماژول FS به صورت زیر استفاده کرد.

1const { readFileSync } = require('fs');
2function readFileSynchronously(path) {
3  try {
4    const data = readFileSync(path);
5    console.log(data.toString());
6  } catch (error) {
7    console.error(error);
8  }
9}

بسته FS/promises نیازی به استفاده از متد ‎readFileSync() ندارد، زیرا این متد ناهم‌زمان نیست. بنابراین، می‌توان به سادگی تابع زیر را بدون نیاز به متد readFileSync() فراخوانی کرد.

1readFileSynchronously('test.txt');
2readFileSynchronously('test1.txt');
3readFileSynchronously('test2.txt');

حال با اجرای دستور node readFileSync.js در ترمینال، هر سه فایلtest ، test1  و test2 خوانده خواهند شد.

فیلم آموزش ماژول FS

ماژول سیستم فایل Node.js متدهای مختلفی را برای خواندن فایل‌ها ارائه می‌دهد. هنگام استفاده از توابع read ، فایل‌ها به ترتیبی خوانده خواهند شد که فراخوانی شده‌اند. برای سایر عملیات، ماژول سیستم فایل در نود جی اس نوعی متد هم‌زمان ارائه می‌دهد، با این حال توصیه می‌شود از متد‌های ناهمزمان برای اجرای موازی استفاده شود. این کار به اطمینان از اجرای روان همه کارها و به حداکثر رساندن کارایی کمک می‌کند.

 

رسیدگی به خطاها در ماژول FS

هنگام کار با فایل‌ها یا دایرکتوری‌ها، بروز خطاها اجتناب‌ناپذیر هستند و آمادگی برای رسیدگی به آن‌ها در هنگام بروز این خطاها کاری ضروری محسوب می‌شود. برای مثال اگر نتوان فایل را پیدا کرد یا اجازه نوشتن در آن وجود نداشته باشد، احتمالاً خطایی رخ داده است.

برای جلوگیری یا کاهش خطا، استفاده از بلوک try-catch هنگام فراخوانی متدها مهم است. در صورت بروز خطا، کنترل به بلوک try-catchمنتقل می‌شود و به برنامه نویس امکان می‌دهد مشکل را برطرف کند.

سخن پایانی

ماژول سیستم فایل در Node.js ابزاری مفید برای مدیریت وظایف سطح پایین و عملیات فایل است. با ماژول FS می‌توان عملیات مختلفی را روی فایل‌ها و دایرکتوری‌ها انجام داد. عملیاتی مانند ایجاد، تغییر نام، حذف، کپی و غیره از مهم‌ترین این عملیات هستند که در این مطلب از مجله فرادرس به صورت عملی بیان شدند.

همه متدها را می‌توان به صورت ناهمزمان با استفاده از Promise در جاوا اسکریپت یا توابع Callback یا در صورت نیاز به صورت هم‌زمان فراخوانی کرد. با این حال بسیار مهم است که هر بار که با متدها کار می‌شود، خطاها را با بلوک try-catchکنترل کنیم. همچنین متدهای ناهمزمان باید همیشه بر متدهای هم‌زمان ترجیح داده شوند.

بر اساس رای ۱۳ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Kinsta
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *