Node.js基礎入門第五天

来源:https://www.cnblogs.com/hsiang/archive/2022/03/26/16052840.html
-Advertisement-
Play Games

經過前面四天的學習,對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/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 不管我們開發是基於Asp.net core 還是.net core,或者還是.net framework的相關應用,如果有一個比較全面的公用類庫以及相關的擴展函數來支撐,我們開發項目上會節省很多相關的處理方法查詢和封裝。本篇隨筆主要針對性的介紹基於一些對象進行擴展函數的封裝帶來的便利性進行說明,畢竟... ...
  • 為了保證用戶輸入系統的數據是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的運行,所以對輸入的數據進行驗證是非常有必要的。 剛開始學代碼的時候,我是這樣進行數據校驗的 看上去是不是很醜陋...,表單數據多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要保存更新數據的地方都 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是IAR環境下無法直接下載調試i.MXRT分散鏈接工程的解決方案。 分散鏈接與載入一直是嵌入式領域比較勸退新手的難題,在恩智浦 i.MXRT 系列為代表的多存儲器架構的 MCU 上,分散鏈接問題體現得尤為明顯,畢竟你在鏈接應用程式各種段( ...
  • 安裝SSH ubuntu 啟動 查看ssh運行狀態 關閉防火牆 開機自動啟動ssh命令 關閉ssh開機自動啟動命令 單次開啟ssh 單次關閉ssh 設置好後重啟系統 查看ssh是否啟動,看到Active: active (running)即表示成功 設置允許使用root用戶登錄 1、切換到 root ...
  • 通常大型 Hadoop 集群是以機架的形式來組織的,同一個機架上的不同節點間的網路狀況比不同機架之間的更為理想,NameNode 設法將數據塊副本保存在不同的機架上以提高容錯性。 ...
  • HDFS 上的文件對應的 Block 保存多個副本,且提供容錯機制,副本丟失或者宕機自動恢復,預設是存 3 個副本。 2.8.x之前的副本策略 官方文檔說明: https://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/ ...
  • 為什麼需要配置gradle? 本機環境:win10 + AS2021.1.1版本 另外說明:搞android,jdk如果是8的,AS會根據你使用的AGP版本,提醒你升級到java11版本,會半自動往sdk文件夾下載11版本的jre。所以在這不說明jdk版本。 名詞解釋: AGP - Android ...
  • 這是Flutter系列第一篇文章,後續會持續更新Flutter相關知識,本篇就主要對於Flutter技術做一個簡單的入門介紹 一、Flutter簡介🔥 Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高質量的原生用戶界面。 Flutter可以與現有的代碼一起工作。在全世界 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...