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; };