nodejs-http模塊補(bǔ)充返回圖片或網(wǎng)頁(yè)文件
你好。不知道我寫的文章對(duì)你們有用沒(méi)有,發(fā)現(xiàn)我寫的有問(wèn)題請(qǐng)私信給我,我會(huì)改錯(cuò)的。
其實(shí)這個(gè)很簡(jiǎn)單,和上一次的對(duì)比起來(lái),就是返回response.end的內(nèi)容區(qū)別,這個(gè)不僅可以返回字符串,也可以返回文件,二者區(qū)別增加了第一個(gè)是fs模塊,第二個(gè)是返回圖片內(nèi)容或者頁(yè)面,應(yīng)該等會(huì)晚上再次補(bǔ)充一篇文章,內(nèi)容看等會(huì)舍友帶飯回來(lái)的心情決定,哈哈。最后有一個(gè)response.end的解釋
廢話不多說(shuō),開始進(jìn)行區(qū)別介紹
1 fs模塊
fs模塊對(duì)應(yīng)的是文件系統(tǒng),比如文件夾的建立,文件,獲取該對(duì)應(yīng)的目錄下文件文字,判斷文件還是文件夾等。
首先讓我們來(lái)梳理一下使用的函數(shù)readFile這個(gè)函數(shù)和readdirSync函數(shù)的區(qū)別。一個(gè)使用的是同步函數(shù),一個(gè)使用的是異步函數(shù),那什么是同步函數(shù),什么是異步函數(shù)呢?他們的執(zhí)行過(guò)程是怎么樣的呢?處理方式是什么呢?抱有一絲希望會(huì)有一個(gè)粉絲來(lái)私信催我寫一個(gè),哈哈。
我們使用的是readFile這個(gè)函數(shù)。首先分解一下這個(gè)函數(shù)的參數(shù)什么?
????????參數(shù)一 文件路徑
????????我使用的是相對(duì)路徑。測(cè)試文件是test.html。
????????參數(shù)二 配置參數(shù)
????????? 這個(gè)是一個(gè)對(duì)象的形式存儲(chǔ),可以考慮不填。個(gè)人覺得養(yǎng)成良好習(xí)慣就加了,主要為了字符編碼不影響以后爆bug。
????????參數(shù)三,回調(diào)函數(shù)
????????這是一個(gè)回調(diào)函數(shù),以后補(bǔ)充,這個(gè)回調(diào)函數(shù)的形參有兩個(gè)第一個(gè)是error,官網(wǎng)文檔注釋的,第二個(gè)是返回對(duì)應(yīng)的數(shù)據(jù)data,這個(gè)形參命名由個(gè)人決定,主要data的類型是buffer類型,以后補(bǔ)充。
2? ?返回?cái)?shù)據(jù)類型
要讓瀏覽器可以識(shí)別你返回的數(shù)據(jù)是什么?是文字。還是圖片,別來(lái)給我杠什么字節(jié)流之類的,在此不探討。
開始進(jìn)行實(shí)驗(yàn)


測(cè)試圖片代碼
// 導(dǎo)入http模塊
const fs=require('fs')
const http=require('http')
const server=http.createServer((request,response)=>{
? ? if(request.url=='/favicon.ico')
? ? console.log('只落地一次的鳥沒(méi)有圖標(biāo)');
? ? console.log('發(fā)起請(qǐng)求的電腦路徑:',request.url);
? ? // 編寫對(duì)應(yīng)的響應(yīng)的狀態(tài)碼。并設(shè)置返回的文本時(shí)html文本,瀏覽器會(huì)自己進(jìn)行辨識(shí)出入元素
? ? fs.readFile('./images/1.jpg',(err,data)=>{
? ? ? ? response.writeHead(200,{ 'Content-type': 'image/jpg'})
? ? ? ? response.end(data) ?
? ? })
? ? console.log('有人訪問(wèn)了服務(wù)器');
})
server.listen(8000,()=>{
? ? console.log('http://127.0.0.1:8000');
})
和測(cè)試頁(yè)面的不同在于Content-type不同,encoding沒(méi)有,主要返回圖片的不需要添加utf-8,
utf-8是處理字符集的編碼方式
response.end()是最后response最后進(jìn)行一次發(fā)送數(shù)據(jù),類似于tcp中的最后一次握手一樣,不過(guò)不是客戶端的處理,而是服務(wù)端發(fā)送最后的報(bào)文。如果有誤請(qǐng)聯(lián)系我。謝謝。