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;  
};  
相关文章
相关标签/搜索