看来我可以将多个处理程序附加到request
,他们都将以正确的顺序/时间接收事件。服务器已经收到和发射的request
何时何时发布数据/结束事件?
function handler1(req, res){
req.on('data', function(data){{
console.log("Handler 1 data");
});
req.on('end', function(){{
console.log("Handler 1 end");
});
}
function handler2(req, res){
req.on('data', function(data){{
console.log("Handler 2 data");
});
req.on('end', function(){{
console.log("Handler 2 end");
});
}
http.on('request', function(req, res){
handler1(req, res);
handler2(req, res);
});
// Handler1 data
// Handler2 data
// Handler1 end
// Handler2 end
请求对象是EventEmitter
对象。因此,它发出事件,任何人都可以为这些事件添加听众。
在请求对象的情况下,它会发出与网络相对应的事件。当某些数据到达时(从请求主体(发出data
事件。如果您对data
事件有多个侦听器,则每个侦听器都会看到每个data
事件都具有完全相同的数据。
end
事件是在请求正文中没有更多数据的地方发出的(所有数据都到了(。
直到您附上一些从传入请求中读取数据的方法(例如data
事件侦听器(,数据已排队并将保存在内存中。即使数据已经开始到达,这也使您有机会连接侦听器,而不必担心丢失任何数据。在Node.js中,许多流以这种方式工作。在您至少为数据附加一个侦听器之前,数据不会开始流过听众。