中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

發布時間:2021-07-16 17:43:11 來源:億速云 閱讀:618 作者:chen 欄目:大數據

本篇內容主要講解“如何用nodejs的http模塊創建一個簡單的靜態資源服務器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用nodejs的http模塊創建一個簡單的靜態資源服務器”吧!

nodejs自問世以來,基于nodejs的web開發框架層出不窮,TJ大神的express和koa,阿里的egg,360大神李成銀的thinkjs等等,這些框架是學不完的。

這些框架都是基于nodejs核心模塊http模塊封裝而來的,只不過按照業務的不同,個人代碼風的不同,產生了不同的框架,今天就帶大家一起用nodejs的http模塊封裝一個簡單的http靜態服務器。

在開始寫代碼之前,我們首先要了解http的模型,http的模型是基于請求=》處理=》響應這樣的一個過程。

nodejs將客戶端向服務端發送請求的過程抽象成了一個事件,我們先用代碼演示一下:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

此時用node命令運行這個文件,就可以返回hello world,服務器啟動了。

但是這個服務器,對任何請求都是返回hello world,功能太簡單了,我們結合nodejs的另外一個核心模塊個,fs模塊,將其改裝成靜態資源服務器,代碼如下:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

此時,我們已經初步完成了,靜態資源服務器的功能,貌似完成了,我們在www目錄下新建一個index.html,然后測試訪問以下服務器:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

訪問結果如下:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

為什么是這樣的呢?我們看響應頭:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

這里并沒有給我們標識正確的mime響應頭,我們該如何呢?

此時需要借助一個第三方包,mime,這個包有兩個方法,一個是根據url的后綴獲取請求文件的mime類型一個是根據mime類型判斷文件后綴,顯然我們需要第一種,官方文檔演示代碼如下:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

服務器代碼更改如下:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

觀察上面代碼,我們引入了,mime模塊,獲取到了文件的mime類型,然后額外增加了一個判斷,如何mime類型中包含text就追加編碼格式為utf8,這樣做是強制瀏覽器按照utf8模式解析文本數據,防止瀏覽器按照默認編碼格式解析文本。

此時運行服務器,查看結果:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

查看network的響應頭:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

查看紅框中的內容,響應頭已經被設置好了。

上面的代碼中有個彩蛋不知道大家有沒有注意到,res.writeheader方法不僅可以設置http規范的響應頭,還可以設置自定義響應頭,上圖中小編設置了一個clm1100的響應頭。

這次貌似又完成了,但是大家想想,如果靜態文件很大,我在www放了一個avi的視頻,上面的代碼還能正常運行嗎,這將avi的大小,如果avi大小超過服務器內存,恩,服務器掛掉了。

怎么解決呢?這里用到了nodejs里面另外一個東西,stream,流。看代碼:

如何用nodejs的http模塊創建一個簡單的靜態資源服務器

此時觀察上面的代碼,我們發現這次沒有使用fs的readFile方法,而是換成了,fs.createReadStream方法,將文件轉化成一個stream,然后將這個流用pipe連接到了res上,然后就直接輸出到客戶端了,這里讀取文件的方式,就是讀取一塊響應一塊,而不是一次性的讀取了。關于stream的使用,咱們下篇文章在討論。

到此,相信大家對“如何用nodejs的http模塊創建一個簡單的靜態資源服務器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新兴县| 翼城县| 伊金霍洛旗| 龙陵县| 志丹县| 南宁市| 青阳县| 石家庄市| 拉萨市| 华容县| 七台河市| 宁明县| 永定县| 进贤县| 涪陵区| 喀喇| 汤原县| 栖霞市| 遂川县| 三亚市| 吉安市| 渑池县| 即墨市| 胶州市| 丰县| 贵南县| 新源县| 青铜峡市| 白河县| 潮安县| 金山区| 阿图什市| 临泽县| 曲阜市| 黄浦区| 揭阳市| 邯郸县| 阳山县| 磴口县| 仙桃市| 遵化市|