- 注意: 撰寫本文目的主要是為了給自己做一個(gè)備忘錄询筏,如果你學(xué)過(guò)Node.js并且希望從本文中找到一些忘記的知識(shí)點(diǎn)绵脯,那么你可以閱讀本文章渊迁。由于文章內(nèi)講解并不是很多,因此此文章并不適合小白入門使用剃盾。
4.文件
4.1.讀取文件
- 對(duì)文件的操作主要是依賴fs模塊腺占,因此我們需要導(dǎo)入fs模塊淤袜。下面的示例代碼是對(duì)文件的簡(jiǎn)單讀取操作,同時(shí)避免對(duì)圖標(biāo)進(jìn)行訪問(wèn)衰伯,為請(qǐng)求加上請(qǐng)求頭铡羡,以指定編碼打開(kāi)文件。
var http = require("http");
var fs = require("fs");
var server = http.createServer(function (req, res) {
if (req.url == "/favicon.ico") {
return; //避免訪問(wèn)圖標(biāo)
}
var userid = parseInt(Math.random * 89999) + 10000;
//給用戶加一個(gè)5位數(shù)的隨機(jī)id
console.log("歡迎" + userid);
//設(shè)置http頭部意鲸,狀態(tài)碼是200烦周,文件類型是html
res.writeHead(200, {
"Content-Type": "text/html;charset=UTF8"
});
fs.readFile("./test/1.txt", {
"charset": "utf-8"
}, function (err, data) {
if (err) {
throw err;
}
console.log(userid + "文件讀取完畢");
res.end(data);
});
});
server.listen(3000, "127.0.0.1");
4.2.文件目錄操作
- 在下面的代碼中,你將會(huì)看到與創(chuàng)建文件及創(chuàng)建文件夾相關(guān)的細(xì)節(jié)知識(shí)點(diǎn)怎顾、路徑文件狀態(tài)的檢測(cè)——是否是文件夾等论矾。
- 下面的程序會(huì)以數(shù)組的形式輸出album目錄下的所有文件夾名稱。
var http = require("http");
var fs = require("fs");
var server = http.createServer(function (req, res) {
if (req.url == "/favicon.ico") {
return; //避免訪問(wèn)圖標(biāo)
}
//發(fā)現(xiàn):文件夾必須要一層一層的創(chuàng)建
// fs.mkdir("./album", function (err) {
// if (err) {
// throw err;
// }
// });
// fs.mkdir("./album/demo", function (err) {
// if (err) {
// throw err;
// }
// });
//檢測(cè)該路徑文件的狀態(tài)
// fs.stat("./album/demo", function (err, stats) {
// //檢測(cè)這個(gè)路徑是不是一個(gè)文件夾
// console.log("該路徑文件是不是一個(gè)文件夾:"+stats.isDirectory());
// })
//只存儲(chǔ)所有的文件夾=
var wenjianjia = [];
fs.readdir("./album/", function (err, files) {
//files是個(gè)數(shù)組杆勇,包括./album文件夾中所有的文件及文件夾
//迭代器就是強(qiáng)行把異步函數(shù),變成同步的函數(shù)
(function iterator(i) {
//遍歷結(jié)束
if (i == files.length) {
console.log(wenjianjia);
return;
}
//stat檢測(cè)狀態(tài)
fs.stat("./album/" + files[i], function (err, stats) {
if (stats.isDirectory()) {
wenjianjia.push(files[i]);
}
iterator(i + 1);
})
})(0);
});
res.end();
});
server.listen(3000, "127.0.0.1");
5.靜態(tài)資源
- 創(chuàng)建static文件目錄饱亿,static文件目錄下包含幾個(gè)html文件蚜退,現(xiàn)在我們通過(guò)將這些文件的名稱作為請(qǐng)求URL從而實(shí)現(xiàn)對(duì)這些靜態(tài)文件的訪問(wèn)。
- 由前面的例子我們可以知道彪笼,當(dāng)圖片需要在網(wǎng)頁(yè)上顯示時(shí)钻注,也需要通過(guò)發(fā)送請(qǐng)求的方式才能顯示在網(wǎng)頁(yè)上,那么html文件也不例外配猫,并且我們?cè)L問(wèn)的文件可能會(huì)有很多種格式幅恋。我們可以將這些文件與對(duì)應(yīng)的格式代碼放入一個(gè)json文件中,然后請(qǐng)求時(shí)根據(jù)文件后綴在json文件中取得文件格式代碼泵肄,這樣我們只需要一個(gè)請(qǐng)求實(shí)現(xiàn)即可對(duì)所有文件請(qǐng)求進(jìn)行處理捆交。
Node示例代碼:
var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");
var server = http.createServer(function(req, res) {
//得到用戶路徑
var pathname = url.parse(req.url).pathname;
var fileUrl = "./"+path.normalize("./static/"+pathname);
console.log(fileUrl);
if (pathname == "/") {
pathname = "index.html";
}
//拓展名
var extname = path.extname(pathname);
//真的讀取這個(gè)文件
fs.readFile("./static/" + pathname, function(err, data) {
if (err) {
//如果此文件不存在,就應(yīng)該用404返回
fs.readFile("./static/404.html", function(err, data) {
res.writeHead(404, {
"Content-Type": "text/html;charset=UTF8"
});
res.end(data);
});
return;
}
getMime(extname,function (mime) {
res.writeHead(200, {"Content-Type": mime});
res.end(data);
});
});
});
server.listen(3000, "127.0.0.1");
getMime()函數(shù)
function getMime(extname,callback) {
//讀取mime.json文件腐巢,得到JSON品追,根據(jù)extname key,返回對(duì)應(yīng)的value
//讀取文件
fs.readFile("./mime.json",function (err,data) {
if(err){
throw Error("找不到mime文件");
return;
}
//轉(zhuǎn)成JSON
var mimeJSON = JSON.parse(data);
var mime = mimeJSON[extname] || "text/plain";
callback(mime);
});
}
JSON文件:
{
".html": "text/html",
".jpg": "image/jpg",
".css": "text/css"
}
文集推薦:
Java基礎(chǔ)方法集1
Python基礎(chǔ)知識(shí)完整版
Spring Boot學(xué)習(xí)筆記
Linux指令進(jìn)階
Java高并發(fā)編程
SpringMVC基礎(chǔ)知識(shí)進(jìn)階
Mysql基礎(chǔ)知識(shí)完整版
健康管理系統(tǒng)學(xué)習(xí)花絮(學(xué)習(xí)記錄)
Node.js基礎(chǔ)知識(shí)(隨手筆記)
MongoDB基礎(chǔ)知識(shí)
Dubbo學(xué)習(xí)筆記
Vue學(xué)習(xí)筆記(隨手筆記)
聲明:發(fā)表此文是出于傳遞更多信息之目的冯丙。若有來(lái)源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益肉瓦,請(qǐng)作者持權(quán)屬證明與本我們(QQ:981086665;郵箱:981086665@qq.com)聯(lián)系聯(lián)系胃惜,我們將及時(shí)更正泞莉、刪除,謝謝船殉。