經過前面四天的學習,對Node.js已經有了一個基礎的認識,今天繼續學習Node.js網路通信編程相關內容,並稍加整理加以分享,如有不足之處,還請指正。 ...
經過前面四天的學習,對Node.js已經有了一個基礎的認識,今天繼續學習Node.js網路通信編程相關內容,並稍加整理加以分享,如有不足之處,還請指正。
path模塊
Node.js中,提供了一個path模塊,在這個模塊中,提供了許多實用的,可被用來處理與轉換文件路徑的方法及屬性。path是一個系統模塊,不需要單獨安裝,主要用於格式化或拼接完整路徑。
1. path模塊示例
以path模塊中最常用的是join方法【拼接路徑】為例,如下所示:
1 var path = require('path'); 2 //拼接路徑:將多個字元串拼接成一個完整的路徑 3 var file = path.join(__dirname,'file1.txt'); 4 console.log("當前路徑:"+file);
示例截圖,如下所示:
註意:__dirname是內置屬性,表示當前程式所在的路徑。
2. path模塊其他方法
path模塊除了join外,還提供了其他方法,如下所示:
1 var path = require('path'); 2 //拼接路徑:將多個字元串拼接成一個完整的路徑 3 var file = path.join(__dirname,'file1.txt'); 4 console.log("當前路徑:"+file); 5 //返迴路徑中的文件夾部分 6 var dirname = path.dirname(file); 7 //返迴路徑中的文件部分,包含文件名和擴展名 8 var filename = path.basename(file); 9 //返迴路徑中的擴展名 10 var extname = path.extname(file); 11 //解析路徑對象,返回一個對象 12 var p = path.parse(file); 13 console.log("dirname:"+dirname); 14 console.log("filename:"+filename); 15 console.log("extname:"+extname); 16 console.log("parse解析後的對象:"); 17 console.log(p)
示例截圖,如下所示:
url模塊
URL模塊主要提供對URL(Uniform Resource Locator,統一資源定位器)的相關操作的屬性和方法。
網址字元串是包含多個有意義組件的結構化字元串。 解析時,將返回包含每個組件的屬性的網址對象。
url
模塊提供了兩種用於處理網址的 API:一種是 Node.js 特定的舊版 API,一種是實現了與 Web 瀏覽器使用的相同的 WHATWG 網址標準的新版 API。
下麵提供了 WHATWG 和 舊版 API 之間的比較。
使用 WHATWG API 解析網址字元串:
1 const myURL = 2 new URL('https://user:[email protected]:8080/p/a/t/h?query=string#hash');
使用舊版 API 解析網址字元串:
1 import url from 'url'; 2 const myURL = url.parse('https://user:[email protected]:8080/p/a/t/h?query=string#hash');
1. 舊的解析方法
舊的解析方法,直接採用模塊的parse函數即可,如下所示:
1 var url = require('url'); 2 var u="https://www.cnblogs.com/hsiang/p/15182972.html"; 3 //舊的解析方法 4 var obj = url.parse(u); 5 console.log("解析後的對象:"); 6 console.log(obj);
解析示例截圖,如下所示:
註意:返回的obj是一個對象,通過obj.屬性名,可以獲取更加詳細的內容。
2. 新的解析方法
1 //新的解析方法【ES6寫法】 2 const {URL} = require('url'); 3 var u="https://www.cnblogs.com/hsiang/p/15182972.html"; 4 const obj=new URL(u); 5 console.log("新的解析方法"); 6 console.log(obj);
示例截圖,如下所示:
ES5寫法,如下所示:
1 //新的解析方法【ES5寫法】 2 var url = require('url'); 3 var u="https://www.cnblogs.com/hsiang/p/15182972.html"; 4 var obj =new url.URL(u); 5 console.log("新的解析方法"); 6 console.log(obj);
註意:通過對比,發現新舊兩種方式解析出來的結果大體上相同,僅存細微差異,具體可參考上述新舊對比截圖。
http模塊
網路作為信息傳輸,接收,共用的虛擬平臺,通過它將各個點,面,體的信息聯繫到一起,從而實現這些資源的共用。網路傳輸數據有一定的規則,這些規則稱之為協議,http協議就是規則的一種,而且是使用最頻繁的一種網路傳輸協議。
1. 什麼是HTTP協議?
超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客戶端可能發送給伺服器什麼樣的消息以及得到什麼樣的響應。請求和響應消息的頭以ASCII形式給出;而消息內容則具有一個類似MIME的格式。HTTP協議定義了數據在瀏覽器和伺服器之間網路傳輸的數據格式和過程。
2. HTTP協議約束的細節
HTTTP協議定義了瀏覽器和伺服器之間交互數據的格式及過程。具體如下所示:
- 定義了瀏覽器以什麼格式向伺服器發送請求;
- 定義了伺服器以什麼格式解析瀏覽器發送過來的數據;
- 定義了伺服器以什麼格式響應數據給瀏覽器;
- 定義了瀏覽器已什麼格式解析伺服器響應的數據;
3. HTTP請求響應過程
以瀏覽一次網頁為例,請求響應過程如下所示:
4. http模塊get方法
因為網路中的請求,大部分都是get方式,且不帶請求體,所以Node.js的http模塊提供了便捷方法。如下所示:
1 var http=require('http'); 2 var fs = require('fs'); 3 4 http.get('http://www.itsource.cn',function(res){ 5 //res是一個IncomingMessage對象 6 //console.log(res); 7 var stream = fs.createWriteStream('./a.html'); 8 //res是流對象,可以監聽data事件 9 10 res.on('data',function(data){ 11 console.log(data.toString()); 12 stream.write(data); 13 }); 14 res.on('end',function(){ 15 stream.end(); 16 console.log('下載成功'); 17 }); 18 //或者採用管道 19 //res.pipe(stream); 20 });
上述示例採用get方法獲取文件內容,並保存文件內容到文件中。示例結果如下:
備註
謁金門·風乍起【作者】馮延巳
風乍起,吹皺一池春水。
閑引鴛鴦香徑里,手挼紅杏蕊。
鬥鴨闌干獨倚,碧玉搔頭斜墜。
終日望君君不至,舉頭聞鵲喜。
作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章