2012-03-20 115 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

相关问题