requestListener是一个方法,会与http.Server类的request事件关联起来。这样当客户端请求到达时,requestListener就会被调用。
requestListener有两个参数,函数原型如下:
function (request, response) { }第一个参数request的类型是
http.IncomingMessage,实现了
Readable Stream接口。 第二个参数的类型是
http.ServerResponse,实现了
Writeable Stream接口。Stream的API在这里:https://nodejs.org/api/stream.html。同时,request和response还是EventEmitter,可以发射特定的事件。
EventEmitter的API在这里:https://nodejs.org/api/events.html#events_class_events_eventemitter,后面我们会讲如何使用EventEmitter来发射事件、处理事件。
再回顾一下我们创建server的代码:
http.createServer(
function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!");
response.end();
}
).listen(8000); http.createServer返回一个http.Server实例,http.Server的listen方法可以让服务器监听在某个端口上,示例中是8000。
如你所见,我们提供了一个匿名函数给createServer方法。在这个方法中,我们通过response参数向客户端回写了“Hello World!”消息。
分析客户端请求
前面我们分析了http.createServer方法,它的参数是一个带两个参数的方法,一个代表了客户端发过来的请求,一个代表了要回写给客户端的响应。我们来看看request参数。
request是
http.IncomingMessage的实例,通过这个实例,我们可以拿到请求参数,比如HTTP方法、HTTP版本、url、头部等,具体的API在这里:https://nodejs.org/api/http.html#http_http_incomingmessage。我们通过修改HelloWorld.js来看看(另存为HelloWorld2.js)。代码如下:
// 引入http模块
var http = require("http"); // 创建server,指定处理客户端请求的函数
http.createServer(
function(request, response) {
console.log("method - " + request.method);
console.log("version - " + request.httpVersion);
console.log("url - " + request.url);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!");
response.end();
}
).listen(8000);
console.log("Hello World start listen on port 8000");
如你所见,我使用console这个对象来输出了一些调试信息,打印了HTTP方法、版本、url等信息。可以执行node HelloWorld2.js,浏览器访问http://localhost:8000,然后跑到命令行看看输出了什么信息,我这里是这样的:









