首頁 web前端 js教程 對於Nodejs的Http模組的解析

對於Nodejs的Http模組的解析

Jun 30, 2018 pm 03:28 PM
nodejs 模組

這篇文章主要介紹了關於Nodejs的Http模組的解析,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

我們知道傳統的HTTP伺服器是由Aphche、Nginx、IIS之類的軟體來搭建的,但是Nodejs並不需要,Nodejs提供了http模組,自身就可以用來建構伺服器,下面透過本文給大家介紹Nodejs的Http模組,需要的朋友參考下吧

一、http伺服器

    我們知道傳統的HTTP伺服器是由Aphche、Nginx、IIS之類的軟體來搭建的,但是Nodejs並不需要,Nodejs提供了http模組,本身就可以用來建置伺服器,例如:

#
var http = require("http");
http.createServer(function(req,res) {
 res.writeHead(200,{
  "content-type":"text/plain"
 });
 res.write("Hello NodeJs");
 res.end();
}).listen(3000);
登入後複製

http模組中封裝了一個HTTP伺服器和一個簡易的HTTP客戶端:http.Server()用來建立是一個基於事件的HTTP伺服器,而http.request()和http.get()可以作為客戶端向HTTP伺服器發起請求。這裡使用的createServer()方法傳回了一個http.Server對象,text/plain的意思是將檔案設定為純文字格式,瀏覽器在取得到這種檔案時並不會處理,如果將content -type設定為text/html,瀏覽器在取得到這種檔案時會自動呼叫HTML的解析器對檔案進行對應的處理。另外,也可以用new http.Server()建構函式的方法來建立http.Server對象,例如:

#
var http = require("http");
var server = new http.Server();
server.on("request",function(req,res) {
  ...
}).listen(3000);
登入後複製

##以上程式碼是直接建立一個http .Server對象,然後為其新增request事件監聽。使用createServer()方法建立的http.Server物件預設新增了一個request事件監聽,但是省略了。


上面說到了http.Server的事件,http.Server最常用的事件是"request",當接收到http請求時觸發。在"request"事件中,傳入回呼函數的參數req和res分別是http.IncomingMessage和http.ServerResponse的實例:

http.IncomingMessage類別包含了從客戶端發來的http請求訊息,它可以用來存取回應狀態、訊息頭、以及資料等,例如:


*headers/<object> - 请求头或响应头的对象
*httpVersion/<string> - http协议版本,可能的值有"1.1"或"1.0"
*method/<string> - 请求的方法,例如"GET"、"POST"等
*statusCode/<number> - http响应状态码
*statusMessage/<string> - http响应状态消息
*url/<string> - 发送http请求的客户端的url
登入後複製

http.ServerResponse類別是傳回給客戶端的訊息,它有三個重要的方法,用於返回回應頭、回應內容以及結束請求:

writeHead(statusCode[, statusMessage][,headers]):向請求的客戶端發送回應頭,該函數在一個請求中最多調用一次,如果不調用,則會自動產生一個回應頭

write(chunk[,encoding][,callback]):向請求的客戶端發送回應內容,chunk是一個buffer或字串,如果chunk是字串,則需要指定編

碼方式,預設為utf-8,在end()方法呼叫之前可以多次呼叫

##end([data ][,encoding][,callback]):結束回應,告知客戶端所有發送已經結束,如果不呼叫這個函數,客戶端將一直處於等待狀態

其他http.Server類別的事件可以參考官方文件:http://nodejs.cn/api/http.html

二、http客戶端http模組提供了http .request()和http.get()兩個方法,功能是作為客戶端向http伺服器發起請求。

http.request(options[,callback])方法
http.request()方法返回一个http.ClientRequest的实例。其中,options是一个对象,表示请求的参数。包括:
*protocol/<string> - 使用的协议,默认为http
*host/<string> - 请求发送至的服务器的域名或 IP 地址,默认为"localhost"
*hostname/<string> - host的别名
*port/<number> - 远程服务器的端口号,默认为80
*method/<string> - 指定http请求方法,默认为"GET"
*path/<string> - 请求相对于根的路径,默认是"/",QueryString应该包含在其中。例如:/index.html?page=12
*headers/<object> - 包含请求头的对象
*timeout/<number> - 它设置了 socket 等待连接的超时时间
登入後複製

例如:

#
var http = require("http");
var querystring = require("querystring");
var postData = querystring.stringify({
  "content":"测试一下",
  "mid":8837
});
var options = {
  hostname:"www.imooc.com",
  port:80,
  path:"/course/document",
  method:"POST",
  headers:{
    "Accept":"application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language":"zh-CN,zh;q=0.8",
    "Connection":"keep-alive",
    "Content-Length":postData.length,
    "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
    "Cookie":"",
    "Host":"www.imooc.com",
    "Origin":"http://www.imooc.com",
    "Referer":"http://www.imooc.com/video/8837",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2763.0 Safari/537.36",
    "X-Requested-With":"XMLHttpRequest",
  }
}
var req = http.request(options,function(res){
  res.on("data",function(chunk){
    console.log(chunk);
  });
  res.on("end",function(){
    console.log("完毕!");
  });
  console.log(res.statusCode);
});
req.on("error",function(err){
  console.log(err.message);
})
req.write(postData);
req.end();
登入後複製

如果請求過程中遇到任何錯誤,則在傳回的請求物件中會觸發"error"事件;

使用http.request()必須總是呼叫req.end()來表示請求的結束,即使沒有資料被寫入主體

http.get(options[,callback])方法


http.get()方法是http.request()方法的簡化版,主要差異是http.get()自動將請求方法設定為了"GET"請求,同時不需要手動調用req.end()

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

Node.js中Request模組處理HTTP協定請求的使用介紹


Node中cluster模組的學習


以上是對於Nodejs的Http模組的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

nodejs和vuejs區別 nodejs和vuejs區別 Apr 21, 2024 am 04:17 AM

Node.js 是一種伺服器端 JavaScript 執行時,而 Vue.js 是一個客戶端 JavaScript 框架,用於建立互動式使用者介面。 Node.js 用於伺服器端開發,如後端服務 API 開發和資料處理,而 Vue.js 用於用戶端開發,如單一頁面應用程式和響應式使用者介面。

nodejs是後端框架嗎 nodejs是後端框架嗎 Apr 21, 2024 am 05:09 AM

Node.js 可作為後端框架使用,因為它提供高效能、可擴展性、跨平台支援、豐富的生態系統和易於開發等功能。

nodejs怎麼連接mysql資料庫 nodejs怎麼連接mysql資料庫 Apr 21, 2024 am 06:13 AM

要連接 MySQL 資料庫,需要遵循以下步驟:安裝 mysql2 驅動程式。使用 mysql2.createConnection() 建立連接對象,其中包含主機位址、連接埠、使用者名稱、密碼和資料庫名稱。使用 connection.query() 執行查詢。最後使用 connection.end() 結束連線。

nodejs中的全域變數有哪些 nodejs中的全域變數有哪些 Apr 21, 2024 am 04:54 AM

Node.js 中存在以下全域變數:全域物件:global核心模組:process、console、require執行階段環境變數:__dirname、__filename、__line、__column常數:undefined、null、NaN、Infinity、-Infinity

nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 Apr 21, 2024 am 05:18 AM

Node.js 安裝目錄中有兩個與 npm 相關的文件:npm 和 npm.cmd,區別如下:擴展名不同:npm 是可執行文件,npm.cmd 是命令視窗快捷方式。 Windows 使用者:npm.cmd 可以在命令提示字元中使用,npm 只能從命令列執行。相容性:npm.cmd 特定於 Windows 系統,npm 跨平台可用。使用建議:Windows 使用者使用 npm.cmd,其他作業系統使用 npm。

nodejs和java的差別大嗎 nodejs和java的差別大嗎 Apr 21, 2024 am 06:12 AM

Node.js 和 Java 的主要差異在於設計和特性:事件驅動與執行緒驅動:Node.js 基於事件驅動,Java 基於執行緒驅動。單執行緒與多執行緒:Node.js 使用單執行緒事件循環,Java 使用多執行緒架構。執行時間環境:Node.js 在 V8 JavaScript 引擎上運行,而 Java 在 JVM 上運行。語法:Node.js 使用 JavaScript 語法,而 Java 使用 Java 語法。用途:Node.js 適用於 I/O 密集型任務,而 Java 適用於大型企業應用程式。

nodejs是後端開發語言嗎 nodejs是後端開發語言嗎 Apr 21, 2024 am 05:09 AM

是的,Node.js 是一種後端開發語言。它用於後端開發,包括處理伺服器端業務邏輯、管理資料庫連接和提供 API。

nodejs可以寫前端嗎 nodejs可以寫前端嗎 Apr 21, 2024 am 05:00 AM

是的,Node.js可用於前端開發,主要優勢包括高效能、豐富的生態系統和跨平台相容性。需要考慮的注意事項有學習曲線、工具支援和社群規模較小。

See all articles