nodejs學習重點之http模組
阿新 • • 發佈:2018-12-14
http 模組
封裝了http server 和 client的功能,就是說可以充當server處理請求,也可以發出請求。
-
http.createServer
:建立server物件 -
http.get
:執行http get請求
const http = require('http') const server = http.createServer((req, res)=>{ // console.log(`url: ${req.url} method: ${req.method}`) // res.writeHead(200, {'Content-Type':'text/plain;charset=utf-8'}) // res.end('收到了請求') router(req, res) }); // 執行get請求 // http.get("http://www.baidu.com", (res)=>{ // // console.log(res); // res.setEncoding('utf-8') // // let data = '' // res.on('data', (chunk)=>{ // data += chunk // }) // res.on('end', ()=>{ // console.log(data); // }) // })
【案例】檔案瀏覽伺服器
功能需求:啟動一個服務,當用戶訪問服務時,給使用者展示指定目錄下的所有檔案;如果子檔案是目錄,則能繼續點進去瀏覽。http://127.0.0.1:5000/ 寫完後訪問這個網站5000是可變的, 最好不要指定1000以下的埠, 因為有可能系統已經佔用了
let http = require("http"); let fs = require('fs'); //5 let path = require('path'); // 1.啟動一個伺服器 let server = http.createServer( (req, res)=>{ //過濾掉/favicon.ico, 否則每次執行都會列印它 if(req.url === '/favicon.ico'){ res.end("") return } // console.log(req.url); //1.3 使的瀏覽器可以識別html標籤 使用utf-8 不然瀏覽器預設會使用GBK(中國特用規範) res.writeHead(200, {'content-type': 'text/html;charset=utf-8'}) showDir(req, res)//1.2 創一個物件 }); //1.啟動伺服器 server.listen(5000); //1.2 實現物件的方法 function showDir(req, res) { // 預設是/,讀取test目錄下面的 let target = 'test'; if(req.url !== '/'){ // 如果不是/根路徑,說明是請求了其他路徑 target = req.url; } //2. 讀取目標目錄下的檔案列表 let s = target.substring(target.indexOf("/")+1); console.log(s); fs.readdir(s, (err, files)=>{ // res.end(JSON.stringify(files)) 這是用json顯示檔案內容 //4. 遍歷一下 li標籤較多 給一個字串拼接起來 let listr = ''; files.forEach( f=>{ //5. 用target檔名拼的一個叫fpath的路徑 let fpath = path.join("./", target, f); console.log(fpath); //用了同步程式碼 let stat = fs.statSync(fpath); if(stat.isDirectory()){ //4. 應該拼上a標籤 // console.log(fpath); //4. 這裡要換成f的那個檔名 listr += `<li><a href="${fpath}">${f}</a></li>` }else { //不拼a標籤 listr += `<li>${f}</li>` } }); res.end(makeHtml(listr)) }) } //3. 顯示這些文字標籤 function makeHtml(lis) { return `<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>標題</title> <style type="text/css"> *{padding: 0; margin: 0} ul>li{ list-style: none; } li{ padding: .6rem 1rem; background-color:#ddd; transition: all 1s; } li:not(:first-child){ border-top: solid 1px #999; } li:hover{ background-color:#aaa; } </style> </head> <body> <div> <ul> ${lis} </ul> </div> </body> </html>` }