http協議的API

1.http.createServer([requestListener])html

它是http模塊的一個靜態方法。node

參數requestListener 是一個會被自動添加到 request 事件中的函數,request事件觸發的函數第一個參數爲:express

request <http.IncomingMessage>服務器

response <http.ServerResponse>app

解釋 :request事件是每次接收到一個請求時觸發, 注意,每一個鏈接可能有多個請求(在 HTTP keep-alive 鏈接的狀況下)。socket

通常requestListener以下:函數

function(req, res, next) {
    // req是http.IncomingMessage的實例。
    app.handle(req, res, next);
 };

返回爲http.server,它是由net.Server 類繼承過來。ui

2.express中res對象是http.ServerResponse的一個實例。編碼

這個對象一般由HTTP SERVER 創建而非用戶手動創建, serverResponse有以下事件和方法:url

'close' 事件
'finish' 事件
response.addTrailers(headers)
response.end([data][, encoding][, callback])
response.finished
response.getHeader(name)
response.headersSent
response.removeHeader(name)
response.sendDate
response.setHeader(name, value)
response.setTimeout(msecs, callback)
response.statusCode
response.statusMessage
response.write(chunk[, encoding][, callback])
response.writeContinue()
response.writeHead(statusCode[, statusMessage][, headers])

對象的建立源碼是:

var res = new ServerResponse(req);

它繼承OutgoingMessage,並且end() 正是 OutgoingMessage.prototype.end()

3.req

  (1)req是http.IncomingMessage 類的一個實例, http.IncomingMessage類(對象)也是HTTP模塊對TCP鏈接的讀操做(實現了可讀流接口)的封裝。

  成員:1:headers(請求/響應頭的對象)。報頭名稱和值的鍵值對,報頭名稱爲小寫!

             2:url 它是請求的 URL 字符串,僅包含 HTTP 請求實際存在的 URL,注意:它不含域名:相似/m/login.html,第一個字符爲「/」。

  事件:1:abort事件

           2:close事件

 4.http.ClientRequest對象

2.第二種狀況就是客戶端發出http請        求的 http.request()方法的返回結果,也能夠是(http.get

var http=require('http');  
var options={  
     hostname:'localhost',  
     port:1337,  
     path:'/',  
     method:'GET'  
};  
var req=http.request(options,function(res){  
    //獲取到服務器的返回數據  
    res.on('data',function(chunk){  
        //這裏的chunk是Buffer對象,這一點必定要注意是編碼的數據  
        console.log(res instanceof http.IncomingMessage);  
        //這裏打印true  
    })  
})  
req.end();  
//必須調用,不然客戶端不會發送請求到服務

 http.ClientRequest對象在 http.request() 內部被建立並返回,它用於寫入HTTP客戶端請求數據,通常用在設置代理服務器,也就是說:req表明客戶端請求的一個可寫入的對象,在nodejs內部建立。

一個http是如何解析socket數據和處理業務函數、響應客戶端的請求,參考:http://www.xiedacon.com/2017/08/18/Node.js%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90-HTTP%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E8%BF%87%E7%A8%8B/#Base

5.獲取機器的IP值

exports.getCurrentIp = function(){  
    /** 
     * 系統模塊 
     * @type {Object} 
     */  
    var os = require('os');  
    /** 
     * 得到系統的網卡列表 
     * @type {Object} 
     */  
    var ipObj = os.networkInterfaces();  
    //獲取系統的網卡  
    var result = [];  
    for(var i in ipObj) {  
        // 得到某個網卡下面的ip列表  
        var ipList = ipObj[i];  
        for(var j = 0; j < ipList.length; j += 1) {  
            // 某個網卡的某個ip  
            var ip = ipList[j];  
            //result中保存的是IPv4的地址  
            if(ip.family === 'IPv4') {  
                result.push(ip.address);  
            }  
        }  
    }  
    return result;  
};  
相關文章
相關標籤/搜索