欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          Node http模塊學習:聊聊基本用法

          本篇文章給大家了解一下Node.js http模塊,介紹一下createServer和listen方法,希望對大家有所幫助!

          Node http模塊學習:聊聊基本用法

          http 模塊

          使用 Node.js 中創(chuàng)建 Web 服務,主要依賴內(nèi)置的 http 模塊。經(jīng)典的 express.js、koa.js 框架都是以 http 模塊為核心,進行的不同程度的封裝。

          創(chuàng)建一個最簡單的 Web 服務只需要幾行代碼。新建一個 index.js 文件,輸入以下內(nèi)容:

          // 1.導入 http 模塊 const http = require('http');  // 2. 調(diào)用 createServer 方法創(chuàng)建服務 const server = http.createServer((request, response) => {     // 3.響應給瀏覽器的內(nèi)容 	response.end('Hello, World');  });  // 4.執(zhí)行 listen 方法,啟動服務 server.listen(3000, () => {     console.log('服務器啟動成功:http://localhost:3000') })
          登錄后復制

          然后打開命令行工具,使用 node 命令執(zhí)行該文件:

          node index.js
          登錄后復制

          命令行工具中會打印:

          服務器啟動成功:http://localhost:3000
          登錄后復制

          之后打開瀏覽器,訪問 http://localhost:3000,就能看到以下內(nèi)容:

          Node http模塊學習:聊聊基本用法

          到這里,只需件簡簡單單的 6 行代碼,就創(chuàng)建了一個 web 服務?!鞠嚓P教程推薦:nodejs視頻教程、編程教學】

          createServer 方法

          可以看到,創(chuàng)建 Web 服務的核心方法就是 createServer 方法。

          它接收一個回調(diào)函數(shù),回調(diào)參數(shù)接收兩個參數(shù),分別是 :

          • request 對象:表示 HTTP 請求對象,里面包含了客戶端本次請求攜帶的信息
          • response 對象:表示 HTTP 響應對象,用于向客戶端設置響應的信息

          這個回調(diào)函數(shù),就是處理 http 請求,設置 http 響應的主要場所。所以,編寫 web 服務,其實就是在不停的在這個函數(shù)中處理請求和響應內(nèi)容。這也是基于 HTTP 協(xié)議本身的請求-響應模型所決定的。當然,實際開發(fā)中肯定不能這么雜糅的寫,都是使用框架,那會有很合理的中間件機制和分層。

          listen 方法

          我們都知道,TCP 協(xié)議是 HTTP 協(xié)議的底層協(xié)議,所有 HTTP 請求的數(shù)據(jù)都是利用 TCP 傳輸?shù)摹?strong>要發(fā)送 HTTP 請求,必須先建立 TCP 連接。

          Node 中要創(chuàng)建 HTTP 服務也是如此。createServer 方法執(zhí)行后會創(chuàng)建一個 Server 類的實例,該 Server 類又繼承自另一個內(nèi)置模塊 net 中的 Server 類,它身上有一個 listen 方法。下面是相關的類型聲明,可以理解這其中的關系。

          // net 模塊  class Server extends EventEmitter {           /**          * 啟動服務器監(jiān)聽連接。此 Server 可以是 TCP 或 IPC 服務器,具體取決于它所監(jiān)聽的內(nèi)容。          */         // 有若干重載,這是最常使用的一種方法         listen(port?: number, hostname?: string, listeningListener?: () => void): this;         listen(port?: number, listeningListener?: () => void): this; }   // http 模塊 import { Server as NetServer } from 'node:net';  function createServer<         Request extends typeof IncomingMessage = typeof IncomingMessage,         Response extends typeof ServerResponse = typeof ServerResponse,     >(requestListener?: RequestListener<Request, Response>): Server<Request, Response>;        class Server<         Request extends typeof IncomingMessage = typeof IncomingMessage,         Response extends typeof ServerResponse = typeof ServerResponse,     > extends NetServer {}
          登錄后復制

          所以通過 createServer 方法創(chuàng)建了服務之后,還用再調(diào)用 listen 方法,用于啟動該服務,監(jiān)聽連接。

          它有多種重載,最常用的一種就是監(jiān)聽一個端口,在啟動成功后,執(zhí)行回調(diào)函數(shù):

          server.listen(3000, () => {     console.log('服務器啟動成功:http://localhost:3000') })
          登錄后復制

          如果服務啟動失敗,比如出現(xiàn)端口占用時,控制臺中會直接報錯,就不再執(zhí)行后面的回調(diào)函數(shù)了。

          再介紹兩種其他的重載,使用的并不多。

          一種是不指定端口號,此時操作系統(tǒng)會隨機分配一個可用的端口號。在服務啟動成功后,可以通過 server.address().port 屬性來獲得分配的端口號:

          server.listen(() => {     const port = server.address().port     console.log(port)     console.log('服務器啟動成功:http://localhost:', port) })
          登錄后復制

          試一下:

          Node http模塊學習:聊聊基本用法

          一種是指定要監(jiān)聽的主機名。

          當不指定 host 時,默認為 0.0.0.0(IPv4)或者 ::(IPv6),支持網(wǎng)絡中所有的主機進行訪問。

          如果設置為 locolhost 或者 127.0.0.1,則只能自己的主機訪問。

          server.listen(3000, 'localhost', () => {     console.log('服務器啟動成功:http://localhost:', port) })
          登錄后復制

          總結(jié)

          我們介紹了 http 模塊的基本用法,主要使用 createServer 來創(chuàng)建服務,再調(diào)用 listen 方法來啟動服務,監(jiān)聽連接。createServer 接收回調(diào)函數(shù)用來具體處理某一個請求,編寫 web 服務主要就是利用回調(diào)函數(shù)的兩個參數(shù) requestresponse ,后面會詳細介紹。

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號