首頁  >  文章  >  web前端  >  對於Nodejs的Http模組的解析

對於Nodejs的Http模組的解析

不言
不言原創
2018-06-30 15:28:161306瀏覽

這篇文章主要介紹了關於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