nodejs请求对象发射事件何时



看来我可以将多个处理程序附加到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中,许多流以这种方式工作。在您至少为数据附加一个侦听器之前,数据不会开始流过听众。

最新更新