Node.js學習筆記--fs模組
阿新 • • 發佈:2019-02-16
1. fs.readFile(path,callback(err,data)):讀取檔案
有兩個引數,第一個是檔案的完整路徑,當前目錄寫./(必須要寫,為了相容Windows系統和Linux系統),第二個引數是回撥函式,表示檔案讀取完成之後做的事情
//可以證明事件環機制 var http=require("http"); var fs=require("fs"); var server=http.createServer(function(req,res){ //不處理小圖示 if (req.url == "/favicon.ico") { return; } //生成一個隨機的五位數id給使用者 var userid=parseInt(Math.random() * 89999)+10000; console.log("歡迎"+userid); res.writeHead(200,{"Content-type":"text/html;charset=uft-8"}); //兩個引數,第一個是完整路徑,當前目錄寫./ //第二個引數是回撥函式,表示檔案讀取完成之後做的事情 fs.readFile("./test/1.txt",function(err,data){ if (err) { throw err; } console.log(userid+"檔案讀取完畢"); res.end(data); }); }); server.listen(3000,"127.0.0.1");
2. fs.mkdir(path):以非同步的方式新建檔案目錄,如果目錄存在,則丟擲異常。
fs.mkdir("./test/fff");
3. fs.stat(path,callback(err,stats)):檢測檔案的狀態,處理是一個檔案還是一個目錄(true表示為一個目錄)
var http=require("http"); var fs=require("fs"); http.createServer(function(req,res){ //不處理小圖示 if (req.url=="/favicon.ico") {return;} fs.stat("./test/aaa",function(err,stats){ //檢測這個路徑是不是一個資料夾(或者目錄) console.log(stats.isDirectory());//顯示結果為true }); res.end(); }).listen(3000,"127.0.0.1");
4. fs.readdir(path,callback(err,files)):讀取該目錄下的所有檔案和目錄,並返回一個該目錄中包含的所有檔案和子目錄的陣列。
//強行讓非同步變成同步處理,不能用普通的for迴圈 var http=require("http"); var fs=require("fs"); http.createServer(function(req,res){ //不處理小圖示 if (req.url=="/favicon.ico") {return;} //儲存所有子目錄 var dirs=[]; fs.readdir("./test",function(err,files){ //files是該目錄下的所有東西,包括檔案和子目錄,是一個數組 //這個迭代器就是強行把非同步的函式變成同步的函式,一步一步進行 (function iterator(i){ //遍歷結束 if (i==files.length) { console.log(dirs); return; } fs.stat("./test/"+files[i], function(err,stats){ //檢測成功之後做的事,是目錄就放入陣列中 if (stats.isDirectory()) { dirs.push(files[i]); } iterator(i+1); }); })(0); }); res.end(); }).listen(3000,"127.0.0.1");
5. 靜態資原始檔管理(讓一個資料夾成為一個根目錄),並且設定其MIME型別
var http=require("http");
var url=require("url");
var fs=require("fs");
var path=require("path");
http.createServer(function(req,res){
// 不處理小圖示
if (req.url=="/favicon.ico") {return;}
//得到使用者的路徑
var pathname=url.parse(req.url).pathname;
//預設首頁
if (pathname=="/") {
pathname="index.html";
}
//獲取路徑中的副檔名
var extname=path.extname(pathname);
//去讀取這個檔案
fs.readFile("./test/"+pathname, function(err,data){
if (err) {
//如果此檔案不存在,就返回404
fs.readFile("./test/404.html", function(err,data){
res.writeHead(404,{"Content-type":"text/html;charset=utf-8"});
res.end(data);
});
return;
};
//MIME型別就是text/html,image/jpg
getMime(extname, function(mime){
res.writeHead(200, {"Content-type":mime});
res.end(data);
});
});
}).listen(3000,"127.0.0.1");
function getMime(extname, callback){
//讀取mime.json檔案,
fs.readFile("./mime.json", function(err,data){
if (err) {
throw Error("找不到mime.json檔案");
return;
}
//轉成JSON
var mimeJson=JSON.parse(data);
var mime =mimeJson[extname] || "text/plain";
//執行回撥函式,mime型別字串就是它的引數
callback(mime);
});
};