2015-11-20 94 views
0

剛開始上的Node.js,我有以下查詢:node.js的eventEmitter:偵聽跨文件的事件

我在server.js文件中的以下JavaScript:

=== =================================================

function onRequest(request, response) { 
    var pathname = url.parse(request.url).pathname; 
    route(handle, pathname, response); 
    console.log("Request for " + pathname + " received."); 
} 

var server = http.createServer(onRequest) 
server.listen(8888); 
console.log("Server started") 

============================================ ===================

我有另一個js文件,我要在哪裏註冊一個li對於服務器發出的「監聽」事件來說,或者對於服務器發出的任何事件來說,都是非常重要的。

我無法更改原始文件以導出服務器對象。

有什麼辦法可以實現我的目標嗎?

回答

1

你會想要將服務器對象傳遞到下面的其他模塊中,或者您想要在其他模塊上公開一個函數,然後您可以將其分配爲父模塊中的偵聽器。無論哪種方式將工作。這取決於你想要撥打.on的位置。

// app.js 

var otherModule = require('./other-module.js'); 

function onRequest(request, response) { 

    var pathname = url.parse(request.url).pathname; 
    route(handle, pathname, response); 

    console.log("Request for " + pathname + " received."); 
} 

var server = http.createServer(onRequest); 
otherModule.init(server); 
server.listen(8888, function() { 
    console.log("Server started"); 
}); // <-- Passing in this callback is a shortcut for defining an event listener for the "listen" event. 

// other-module.js 

exports.init = function (server) { 
    server.on('listen', function() { 
    console.log("listen event fired."); 
    }); 
}; 

在用於listen事件上面的例子中我設置兩個事件偵聽器。當我們將一個回調函數傳遞給server.listen時,第一個被註冊。這只是做server.on('listen', ...)的捷徑。第二個事件處理程序設置在other-module.js中,顯然是:)