2012-03-20 118 views
11

我似乎無法弄清楚如何讓我的快遞服務器在服務器啓動時運行一個簡單的功能。哪裏是調用一個函數在服務器啓動時運行的適當位置,以及正確的語法?如何在Express服務器啓動時運行某個功能?

我在我的路由功能的文件作爲exports.myFunction = function() { code here};

我試過在app.configure塊作爲routes.myFunction堅持到底。我試着將它改爲myfunction() { code},然後在配置塊中調用它作爲routes.myfunction(),那裏也沒有運氣。該函數需要保留在包含我的路由的文件中,因爲它改變了一些全局變量。

我知道這是一些愚蠢簡單的語法,但我似乎無法找到任何提示here或谷歌。非常感謝您的幫助!

回答

22

使用此事件:

app.on('listening', function() { 
    // server ready to accept connections here 
}); 

說實話app由express.createServer()返回的只是http.Server,所以一切都在nodejs docs related to http.Server有意義的快遞和railwayjs描述。

+0

太棒了!這正是我需要的=) – kjb 2012-03-20 23:28:24

+0

它不適合我。我認爲這與生成器的'www'文件已經有'listen'事件有關? – 2017-08-23 13:38:58

6

我會保持簡單。在您撥打app.listen(port)的模塊中,只需在之前(或之後)調用您的啓動功能即可。如果您需要該功能駐留在包含其他路由的單獨模塊中,請將其導出,以便您的主server.js模塊可以在啓動時調用它。如果你還不滿意,可以考慮綁定express/connect中的某個事件監聽器,儘管我不確定是否發佈了明確的「啓動」事件。

在server.js(或任何模塊您啓動Express服務器),這樣做:

var myRoutes = require("./myroutes"); 
var app = express.createServer(); 
... 
app.listen(8080, "127.0.0.1", function() { 
    myRoutes.myFunction(); 
}); 

您也可以綁定到「監聽」事件作爲@Anatoly說。 docs for the listening event are here

+0

嗯,仍然沒有運氣。我沒有得到任何跡象表明該功能實際上正在運行,但也沒有錯誤。 =/ – kjb 2012-03-20 05:38:43

+0

你的意思是「導出它,讓你的主server.js模塊可以在啓動時調用它」?原諒我因爲我是新的快速/ javascript – kjb 2012-03-20 05:46:11

+0

它不會工作,因爲'listen'方法的異步性質。 – Anatoliy 2012-03-20 09:32:33

相關問題