前文我們已經聊過原生NodeJS如何打一個最簡單的服務器,也就是nodejs http模塊 在http篇咱們結尾作了一個小東西 - 詳細文章地址:Nodejs-基礎-httpjavascript
也就是這個,這裏面我們直接用switch來判斷請求的什麼,那這個你們也都知道,若是東西多了,就寫瘋了, 並且,如今只能輸入一個字符串,要是請求個圖片或者視頻,就不行了,固然了,base64也能夠,不過。。。。。。那玩意體積不還大麼,再說也有更好的方法,也就是我們今天說的——fs模塊html
那麼今天我就來聊一聊fs模塊前端
功能:fs主要是讀文件和寫文件用的,用途很是廣法也很是方便,也是系統自帶的文件類型操做的模塊java
說了那麼多,具體怎麼用呢,其實fs有不少不少方法,複製粘貼移動的,我們這裏說兩個主要而且經常使用的node
fs.readFile(文件名,function(err, data){}) —— 讀文件 fs.writeFile(文件名,內容, function(err){}) —— 寫文件webpack
這兩個方法從名字都能看出來他倆是幹哈得了,至於爲何會有回調呢,可能會有人有疑問,回調回調的就回調地獄了,套不少層,很麻煩對不對 實際上是這樣的,想象一下,服務器是同步仍是異步的(說了句廢話),同步異步用最俗的話來講就是異步一快跑同步等着前一個跑完,那麼每一個readFile確定都須要一個回調,可是回調地獄怎麼解決呢,前端同窗應該瞭解的比較多, async await promise 真香,事實上node 和 node框架express都有這個問題,就是項目容易回調地獄,這也就是爲何express官方團隊都受不了express了 又寫了個koa,固然,express這些和node原生相關的庫也都是有promise版或者有庫能夠統一轉換的,這個不用擔憂,之後的文章會提到web
好的,那讓咱們直接來試試express
首先 建兩個文件,像這樣 promise
而後邊寫 fs.js
服務器
const fs = require('fs');
fs.readFile('./1.txt', (err, data) => {
if (err) {
console.log('讀取失敗');
return;
}
console.log(data);
});
複製代碼
readFile 和 writeFile 的回調函數裏都有兩個參數,一個是err,一個是data,這個很好理解,一個是讀文件失敗緣由,一個就是真實讀過來的數據
而後我們在1.txt裏隨便寫點文字,像這樣👇
這時候咱們運行fs文件 node fs.js
, 就會看到👇
Buffer 是原始二進制數據,看到這可能有人有疑問,爲何我寫的是文字,出來的也是二進制呢,直接給我不就完了麼,是這樣的,對於服務器來講,單處理文本數據就好了?確定不行,還有一些圖片視頻無法直接展現的,因此統一全是二進制輸出。 固然了,若是就是想看到文字,也是能夠的直接toString()就能夠,像這樣👇
看了上面的例子,其實writeFile也是更沒有什麼了,這裏就直接粘例子了
是否是很簡單~
上篇文章http模塊作了個例子
const http = require('http');
let server = http.createServer((req, res) => {
console.log(req.url);
switch (req.url) {
case '/1.html':
res.write('1.html');
break;
case '/2.html':
res.write('2.html');
break;
default:
res.write('404');
break;
}
res.end();
});
// 監聽端口
server.listen(5000);
複製代碼
我們直接改造一下這個,請求文件的時候直接從一個文件夾內去找,找到了給你,找不到就直接返回404 既然如此,我們能夠看一下 asmp是怎麼作的,他就是把這些文件放到www目錄的,好的,那我們也來建一個www 名字隨便,習慣而已 稍微縷一縷思路
好的,有了這個思想,我們改造一下這個代碼
const http = require('http');
const fs = require('fs');
let server = http.createServer((req, res) => {
if (req.url == '/favicon.ico') {
return;
}
let file_name = './www' + req.url;
console.log(file_name);
fs.readFile(file_name, (err, data) => {
if (err) {
res.write('404');
} else {
res.write(data);
}
res.end();
});
});
server.listen(5000);
複製代碼
而後www下隨便建兩個index.html,甚至放點圖片或者視頻
http://localhost:5000/index.html
到這爲止已經能夠直接返回靜態文件了,可是這對服務器來講仍是遠遠不夠的,由於最起碼的請求處理什麼get、post 上傳文件視頻什麼的,我們下篇文章就來講一說數據get請求處理
有什麼感興趣的,或者遇到什麼問題能夠直接加我好友,我們一塊兒溝通
微信:Dyy916829411 qq: 916829411