nodeJS實現簡單靜態伺服器

2021-09-11 12:57:37 字數 1758 閱讀 6386

引入依賴模組

let config = require('./config');

let chalk = require('chalk');//粉筆模組(命令列變色)

let http = require('http');//http模組

let fs = require('fs');//檔案模組

let zlib = require('zlib');

let handlebars = require('handlebars');//模板引擎

let url = require('url');//url模組解析請求url

let mime = require('mime');//mime模組通過檔名稱/路徑拿到內容型別

let path = require('path');

let = require('util');

let stat = promisify(fs.stat);

let readdir = promisify(fs.readdir);

process.env.debug = 'static:*';

複製**

編譯模板函式
function

list()

複製**

此函式主要用於編譯模板,返回乙個檔案list列表用於返回給客戶端。

start方法啟動服務

start():$`;

debug(`start at $`);

})}複製**

this.config.port可以自己定義埠,debug用於在控制台列印資訊。

請求處理方法

async request(req,res) = url.parse(req.url);

let filepath = path.join(this.config.root,pathname);

try});

let html = this.list();

res.setheader('content-type','text/html');

this.sendfile(req,res,html,statobj,'html');

}else

}catch (e)

}複製**

這個是主要處理邏輯,首先通過解析客戶端的請求url,通過path模組來拿到檔案路徑,第乙個引數是config中配置的靜態檔案根目錄;然後來判斷當前請求的是檔案還是目錄,這裡使用乙個try catch**塊來捕獲異常,如果請求的是個目錄的話,遍歷這個目錄下的所有檔案並且將檔名和檔案路徑傳給list編譯模板,然後交給傳送方法去處理。

傳送處理方法

sendfile(req,res,filepath,statobj,type)else 

}複製**

傳送方法裡設定的快取策略為強制快取,並且在傳送方法裡呼叫zlibfn方法去看客戶端請求是否使用壓縮,並在最後將內容pipe到res裡返回給客戶端。

zlib壓縮方法

zlibfn(req,res)

if (acceptencoding.match(/\bdeflate\b/)) else

if (acceptencoding.match(/\bgzip\b/)) else

}複製**

這裡主要是通過請求頭中的accept-encoding來判斷是否壓縮,以何種方式壓縮,壓縮後返回乙個流物件。

初寫node靜態伺服器(簡易版)全部**請見github

nodejs 搭建靜態伺服器

伺服器分類 按照請求的資源型別進行分類 搭建靜態伺服器 靜態的意思 瀏覽器請求某個檔案,對應的檔案內容返回給瀏覽器 思路 獲取請求檔案的路徑 根據路徑找到對應的檔案,有則返回,沒有則給出提示。設定對應的頭資訊 頭資訊 檔案的字尾 mime型別 當訪問資料夾的時候,讓其預設訪問該檔案下的index.h...

nodejs伺服器簡單封裝

匯出模組 1.2 例項化物件index.js require new on req,res on user req,res run 3000 constructor his.regobj 新增正則物件 新增正則匹配 for let key in this regobj if url in this ...

node js 本地靜態資源伺服器

引入http模組 引入chalk模組 這是乙個作用在vs code上的顏色工具 const chalk require chalk 引入 配置的變數 const config require config defaultconfig 例項話化服務,req 是客戶端的請求,包含各種資訊 res是 返回...