1、打开gitthub搜索node选择官方仓库
2、点击进去在页面中按字母 T,进入搜索,搜索http
3、选择v1.02版本,查看源码
exports.IncomingMessage = require('_http_incoming').IncomingMessage;
exports.OutgoingMessage = require('_http_outgoing').OutgoingMessage;
提供输入输出流对象。
exports.createServer = function(requestListener) {
return new Server(requestListener);
};
返回一个实例对象 Server
var server = require('_http_server');
exports.ServerResponse = server.ServerResponse;
exports.STATUS_CODES = server.STATUS_CODES;
发现是require了一个私有模块,_http_server,按T进入搜索 _http_server.js,,文件中的函数
function Server(requestListener) {
if (!(this instanceof Server)) return new Server(requestListener);
net.Server.call(this, { allowHalfOpen: true });
if (requestListener) { //如果有回调方法
this.addListener('request', requestListener); //增加事件监听
}
但request是何时触发的呢。通过下面的函数 emit(),这个函数包括在function parserOnIncoming(req, shouldKeepAlive)中
self.emit('request', req, res);
var res = new ServerResponse(req);