如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

本篇內(nèi)容主要講解“如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器”吧!

創(chuàng)新互聯(lián)是一家專業(yè)提供興賓企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為興賓眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

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

這些框架都是基于nodejs核心模塊http模塊封裝而來的,只不過按照業(yè)務(wù)的不同,個人代碼風(fēng)的不同,產(chǎn)生了不同的框架,今天就帶大家一起用nodejs的http模塊封裝一個簡單的http靜態(tài)服務(wù)器。

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

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

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

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

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

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

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

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

訪問結(jié)果如下:

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

為什么是這樣的呢?我們看響應(yīng)頭:

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

這里并沒有給我們標(biāo)識正確的mime響應(yīng)頭,我們該如何呢?

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

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

服務(wù)器代碼更改如下:

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

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

此時運(yùn)行服務(wù)器,查看結(jié)果:

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

查看network的響應(yīng)頭:

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

查看紅框中的內(nèi)容,響應(yīng)頭已經(jīng)被設(shè)置好了。

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

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

怎么解決呢?這里用到了nodejs里面另外一個東西,stream,流??创a:

如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器

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

到此,相信大家對“如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章名稱:如何用nodejs的http模塊創(chuàng)建一個簡單的靜態(tài)資源服務(wù)器
URL網(wǎng)址:http://muchs.cn/article16/ihcsgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站改版網(wǎng)站導(dǎo)航、軟件開發(fā)、微信公眾號、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)