不急著寫下第一行**,而是先梳理一下就基本功能而言有哪些步驟。
在本地根據指定埠啟動乙個http server,等待著來自客戶端的請求
當請求抵達時,根據請求的url,以設定的靜態檔案目錄為base,對映得到檔案位置
檢查檔案是否存在
如果檔案不存在,返回404狀態碼,傳送not found頁面到客戶端
如果檔案存在:
等待來自客戶端的下乙個請求
建立乙個nodejs-static-webserver
目錄,在目錄內執行npm init
初始化乙個package.json檔案。
接著建立如下檔案目錄:mkdir nodejs-static-webserver && cd "$_"// initialize package.json
npm init
default.json-- config
---- default.json
-- static-server.js
default.js
存放一些預設配置,比如埠號、靜態檔案目錄(root)、預設頁(indexpage)等。當這樣的乙個請求http://localhost:9527/myfiles/
抵達時. 如果根據root
對映後得到的目錄內有index.html,根據我們的預設配置,就會給客戶端發回index.html的內容。
在這個模組檔案內,我們宣告了乙個staticserver
類,並給其定義了start
方法,在該方法體內,建立了乙個server
物件,監聽rquest
事件,並將伺服器繫結到配置檔案指定的埠。在這個階段,我們對於任何請求都暫時不作區分地簡單地返回請求的檔案路徑。path
模組用來規範化連線和解析路徑,這樣我們就不用特意來處理作業系統間的差異。
const staticserver = require('./static-server');在這個檔案內,呼叫上面的(new staticserver()).start();
static-server
模組,並建立乙個staticserver例項,呼叫其start
方法,啟動了乙個靜態資源伺服器。這個檔案後面將不需要做其他修改,所有對靜態資源伺服器的完善都發生在static-server.js
內。
在目錄下啟動程式會看到成功啟動的log:
server started on port 9527
在瀏覽器中訪問,可以看到伺服器將請求路徑直接返回了。
之前我們對任何請求都只是向客戶端返回檔案位置而已,現在我們將其替換成返回真正的檔案:
routehandler(pathname, req, res)將由start() ).listen(this.port, err => );
}
routehandler
來處理檔案傳送。
讀取檔案之前,用fs.stat
檢測檔案是否存在,如果檔案不存在,**函式會接收到錯誤,傳送404響應。
respondnotfound(req, res) );res.end(`
the requested url $ was not found on this server.
`); }
respondfile(pathname, req, res)
routehandler(pathname, req, res) else
});}
note:讀取檔案,這裡用的是流的形式
createreadstream
而不是readfile
,是因為後者會在得到完整檔案內容之前將其先讀到記憶體裡。這樣萬一檔案很大,再遇上多個請求同時訪問,readfile
就承受不來了。使用檔案可讀流,服務端不用等到資料完全載入到記憶體再發回給客戶端,而是一邊讀一邊傳送分塊響應。這時響應裡會包含如下響應頭:預設情況下,可讀流結束時,可寫流的transfer-encoding:chunked
end()
方法會被呼叫。
使用node搭建靜態資源伺服器
npm install yumu static server g shift 滑鼠右鍵 在此處開啟powershell 視窗 server 會在當前目錄下啟動乙個靜態資源伺服器,預設埠為8080 server p port 3000 會在當前目錄下啟動乙個靜態資源伺服器,埠為3000 server ...
如何搭建node服務
1.首先要安裝好node,js 3.安裝好了,我們開啟cmd,輸入命令列1 node v,這裡是查詢node版本,如果出現以下介面說明已經安裝成功了。4.輸入命令列2 npm install anywhere g 這裡是全域性變數,出現以下介面,說明已經成功安裝了。5.好了,我們把自己的靜態專案放在...
node 本地搭建服務
搭建本地系統 安裝node 安裝mongodb 啟動mongoldb 怎麼看是否已經安裝mongoldb 進目錄 usr local cellar,看是否有 公升級npm,sudo npm install npm g 裝包 npm install,若不行,就用sudo npm install 裝bo...