http协议的API

1.http.createServer([requestListener])

它是http模块的一个静态方法。

参数requestListener 是一个会被自动添加到 request 事件中的函数,request事件触发的函数第一个参数为:

request <http.IncomingMessage>

response <http.ServerResponse>

解释 :request事件是每次接收到一个请求时触发, 注意,每个连接可能有多个请求(在 HTTP keep-alive 连接的情况下)。

一般requestListener如下:

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

返回为http.server,它是由net.Server 类继承过来。

2.express中res对象是http.ServerResponse的一个实例。

这个对象通常由HTTP SERVER 建立而非用户手动建立, serverResponse有如下事件和方法:

'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;  
};  
原文地址:https://www.cnblogs.com/liuyinlei/p/6548475.html