سلام، با قسمت ششم آموزش رایگان NodeJs در خدمت شما هستیم. در این قسمت به مدیریت و بررسی فایل ها به وسیله ماژول File System خواهیم پرداخت. ابتدا ماژول File System را به عنوان یک سرور فایل در نظر میگیریم سپس به ویرایش، افزودن و حذف یک فایل به وسیله ماژول File System میپردازیم.
سرفصل های ماژول File System
ماژول File System در یک سرور ارائه فایل
ماژول File System یا به اختصار fs به شما این اجازه را میدهد که به راحتی فایل های داخل سیستم را کنترل کنید. برای افزودن این ماژول به صفحه جاوا اسکریپتی مثل server.js به شکل زیر مثل ماژول های قبلی رفتار میکنیم.
var fs = require("fs");
از ماژول File System برای مقاصد زیر استفاده میشود:
- خواندن فایل
- ویرایش فایل
- حذف فایل
- ایجاد فایل
- تغییر نام فایل
خواندن فایل با ماژول File System در NodeJs
بگذارید با یک مثال شروع کنیم. یک فایل HTML به ساختار زیر طراحی کنید و در همان فولدر sever.js با نام index.html قرار دهید.
<html>
<body>
<h1>Hello Node.JS</h1>
<p>www.dornam.com</p>
</body>
</html>
قبلا با مفاهیم سرور در NodeJs آشنا شدیم و با ماژول HTTP کار کردیم. برای اینکه یک متنی نمایش میدادیم میبایست در قسمت res.write آن را مینوشتم. هزاران سایت با NodeJs طراحی شده اند آیا آنها تک تک و جزء به جزء متون را نوشته اند؟ البته که نه!
یکی از راههای ساده برای نمایش فایل در سرور Node.Js استفاده از ماژول File System است. ابتدا ماژول HTTP را به فایل server.js اضافه میکنیم. سپس ماژول file system را اضافه میکنیم که به اختصار fs نوشته میشود. در ادامه با توجه به مقالات قبلی نوشته شده در این مورد یک سرور ایجاد میکنیم. اما تفاوتی که در اینجا وجود دارد این است که میبایست اطلاعات از یک فایل به اسم index.html خوانده شود. برای اینکار از تابعی به اسم readFile در ماژول Node.Js استفاده میکنیم و آن را در تابع createServer از ماژول HTTP فراخوانی میکنیم.
به مثال زیر با دقت توجه کنید:
var http = require("http");
var fs = require("fs");
http.createServer(function (req, res) {
fs.readFile("index.html", function (err,data) {
res.writeHead(200 , {"content-type" : "text/html"});
res.write(data);
res.end();
});
}).listen(80);
تابع readFile در ابتدا آدرس URL فایل مورد نظر را دریافت میکند و در پارامتر بعدی یک تابع قرار داده میشود که پارامتر اول آن خطا یا error و پارامتر بعدی آن data یا همان اطلاعات موجود در فایل index.html است.
باز هم مثل مثال های قبل در httpheader برای پاسخ به مرورگر باید بگوییم در حال ارسال چه فایلی هستیم، سپس داده را بفرستیم.
دقت داشته باشید در اینجا من پورت ۸۰ را در نظر گرفتم که به معنی این است اگر دستور node server.js را اجرا کنم در آدرس http://localhost قادر به دیدن خروجی کار هستم.
پیشنهاد میکنم مقاله «تفاوت URL نسبی با URL مطلق» را مطالعه بفرمایید.
خروجی باید شبیه عبارت زیر باشد:
ایجاد فایل با ماژول File System در سرور NodeJs
همانطور که در ابتدا گفته شد این ماژول برای ایجاد فایل نیز مناسب است برای این منظور سه تابع کاربردی در نظر گرفته شده است که عبارت اند از:
- تابع appendFile
- تابع open
- تابع writeFile
تابع appendFile در ماژول File System
تابع appendFile یک محتوا مثل متن را به فایل مورد نظر اضافه میکند. نکته این است که اگر فایل وجود نداشته باشد ابتدا فایل را میسازد. این تابع سه پارامتر میگیرد در پارامتر اول نام فایل (آدرس فایل)، پارامتر دوم محتوای مورد نظر و پارامتر سوم یک تابع است که تنها ورودی آن error است.
ما میخواهیم عبارت Dornam را به یک فایل با فرمت txt بیفزاییم. به مثال زیر توجه کنید:
fs.appendFile("file.txt" , "Dornam" , function(error){
if(error)
{
throw error;
}
console.log("File Saved!");
});
در اینجا من در نرم افزار VSCode عبارت مورد نظر را نوشتم و تعیین کردم اگر خطایی رخ داد، خطا را پرتاب (throw) کند. در نهایت هم پیامی برای نمایش در کنسول قرار دادم. این پیام به هنگام اجرای server.js نمایش داده میشود. به تصویر زیر و پیام کنسول File Saved و فایل ایجاد شده (file.txt) در فولدر کار من توجه کنید.
تابع open در ماژول File System
در ادامه قصد دارم به وسیله تابع open فایلی به اسم file2.txt ایجاد کنم. این تابع نیز سه پارامتر دریافت میکند که پارامتر اول نام فایل یا آدرس URL فایل، پارامتر دوم اصطلاحا یک flag است که دستور میدهد روی فایل چه کاری انجام شود. برای نوشتن فایل باید از flag یا فلگ w استفاده کنیم. پارامتر سوم نیز یک تابع است با دو پارامتر که در مثال میبینید:
var fs = require("fs");
fs.open("file2.txt", "w" , function(error , file){
if(error)
{
throw error;
}
console.log("File Saved!");
});
همانطور که مشاهده میکنید از flag یا فلگ w برای ایجاد فایل استفاده کردیم. همچنین برای خواندن فایل میتوانیم از flag یا فلگ r استفاده کنیم که در آینده در مقاله ای با عنوان مثال های عملی به آن خواهیم پرداخت. فعلا اینکه بدانید چگونه فایل ایجاد میشود کافی است.
همانطور که در تصویر مشاهده کردید پیام ذخیره نمایش داده شد و فایل file2.txt ایجاد شد.
تابع writeFile در ماژول File System
به وسیله این تابع، اگر محتوایی داخل فایل مورد نظر باشد، با محتوای جدید جایگزین میشود. اگر هم فایلی با این نام وجود نداشته باشد فایل جدیدی ایجاد میشود.
به قطعه کد زیر توجه داشته باشید:
var fs = require("fs");
fs.writeFile("file.txt", "Hello from dornam!" , function(error , file){
if(error)
{
throw error;
}
console.log("File Saved!");
});
اگر به یاد داشته باشد ما در file.txt با تابع appendFile عبارت dornam را ذخیره کرده بودیم. حالا به وسیله تابع writeFile عبارت hello from dornam را جایگزین کردیم. البته اگر فایلی با این اسم وجود نداشت، ابتدا فایل را میساخت سپس عبارت مورد نظر را به فایل اضافه میکرد.
ویرایش محتوای فایل در ماژول File System
برای ویرایش محتوای فایل در Node.Js میتوان از دو تابع استفاده کرد:
- تابع appendFile
- تابع writeFile
تابع appendFile برای ویرایش فایل
با استفاده از این تابع در صورتی که فایل مورد نظر وجود داشته باشد؛ هر عبارتی که به عنوان محتوا بنویسید در انتهای فایل اضافه میشود! (به تکرار ساختارش نمیپردازیم، ساختار همانند ایجاد یک فایل است که در بالا شرح داده شد).
در این مثال در فایل file.txt عبارت dornam را به انتهای فایل افزودیم.
var fs = require("fs");
fs.appendFile("file.txt", "dornam", function (error) {
if (error) {
throw error;
}
console.log("File Updated!");
});
تابع writeFile برای ویرایش فایل
در استفاده از این تابع بسیار توجه کنید. هر آنچه به عنوان متن در نظر بگیرید در فایل مورد نظر عینا جایگزین میشود.
یعنی یک بار محتوای داخل فایل پاک میشود سپس محتوای جدید درون آن قرار میگیرد.
به مثال زیر توجه داشته باشید:
var fs = require("fs");
fs.writeFile("file.txt", "Hello from dornam", function (error) {
if (error) {
throw error;
}
console.log("Replaced!");
});
حذف فایل در ماژول File System در NodeJs
با استفاده از این ماژول میتوان فایل ها را حذف کرد. این کار بسیار آسان خواهد بود. به وسیله تابع unlink به راحتی قابل انجام است. پارامتر اول این تابع نام فایل مورد نظر را میگیرد و پارامتر دوم مثل خیلی از تابع های دیگر یک تابع را میگیرد که پارامتر آن error است.
به مثال زیر توجه بفرمایید. قصد حذف فایل file.txt را داریم:
var fs = require("fs");
fs.unlink("file.txt", function (error) {
if (error) {
throw error;
}
console.log("File Deleted!");
;})
ویرایش نام فایل در ماژول File System
برای ویرایش نام از تابعی با اسم rename استفاده میکنیم. سه پارامتر دریافت میکند. پارامتر اول نام فایل موردنظر است. پارامتر دوم نام جدیدی است که برای فایل در نظر گرفته اید. پارامتر سوم نیز تنها یک تابع با پارامتر error است.
به مثال زیر توجه داشته باشید. نام فایل file.txt به newname.txt تغییر پیدا خواهد کرد.
var fs = require("fs");
fs.rename("file.txt", "newname.txt", function (error) {
if (error) {
throw error;
}
console.log("file renamed!");
});