您好,登錄后才能下訂單哦!
本篇內容主要講解“如何用nodejs的http模塊創建一個簡單的靜態資源服務器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用nodejs的http模塊創建一個簡單的靜態資源服務器”吧!
nodejs自問世以來,基于nodejs的web開發框架層出不窮,TJ大神的express和koa,阿里的egg,360大神李成銀的thinkjs等等,這些框架是學不完的。
這些框架都是基于nodejs核心模塊http模塊封裝而來的,只不過按照業務的不同,個人代碼風的不同,產生了不同的框架,今天就帶大家一起用nodejs的http模塊封裝一個簡單的http靜態服務器。
在開始寫代碼之前,我們首先要了解http的模型,http的模型是基于請求=》處理=》響應這樣的一個過程。
nodejs將客戶端向服務端發送請求的過程抽象成了一個事件,我們先用代碼演示一下:
此時用node命令運行這個文件,就可以返回hello world,服務器啟動了。
但是這個服務器,對任何請求都是返回hello world,功能太簡單了,我們結合nodejs的另外一個核心模塊個,fs模塊,將其改裝成靜態資源服務器,代碼如下:
此時,我們已經初步完成了,靜態資源服務器的功能,貌似完成了,我們在www目錄下新建一個index.html,然后測試訪問以下服務器:
訪問結果如下:
為什么是這樣的呢?我們看響應頭:
這里并沒有給我們標識正確的mime響應頭,我們該如何呢?
此時需要借助一個第三方包,mime,這個包有兩個方法,一個是根據url的后綴獲取請求文件的mime類型一個是根據mime類型判斷文件后綴,顯然我們需要第一種,官方文檔演示代碼如下:
服務器代碼更改如下:
觀察上面代碼,我們引入了,mime模塊,獲取到了文件的mime類型,然后額外增加了一個判斷,如何mime類型中包含text就追加編碼格式為utf8,這樣做是強制瀏覽器按照utf8模式解析文本數據,防止瀏覽器按照默認編碼格式解析文本。
此時運行服務器,查看結果:
查看network的響應頭:
查看紅框中的內容,響應頭已經被設置好了。
上面的代碼中有個彩蛋不知道大家有沒有注意到,res.writeheader方法不僅可以設置http規范的響應頭,還可以設置自定義響應頭,上圖中小編設置了一個clm1100的響應頭。
這次貌似又完成了,但是大家想想,如果靜態文件很大,我在www放了一個avi的視頻,上面的代碼還能正常運行嗎,這將avi的大小,如果avi大小超過服務器內存,恩,服務器掛掉了。
怎么解決呢?這里用到了nodejs里面另外一個東西,stream,流。看代碼:
此時觀察上面的代碼,我們發現這次沒有使用fs的readFile方法,而是換成了,fs.createReadStream方法,將文件轉化成一個stream,然后將這個流用pipe連接到了res上,然后就直接輸出到客戶端了,這里讀取文件的方式,就是讀取一塊響應一塊,而不是一次性的讀取了。關于stream的使用,咱們下篇文章在討論。
到此,相信大家對“如何用nodejs的http模塊創建一個簡單的靜態資源服務器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。