【问题标题】:How to run a function when an Express server starts up?Express 服务器启动时如何运行函数?
【发布时间】:2012-04-04 14:37:32
【问题描述】:

我似乎无法弄清楚如何让我的快速服务器在服务器启动时运行一个简单的功能。在服务器启动时调用函数以运行的适当位置以及正确的语法在哪里?

我的路由文件中有函数exports.myFunction = function() { code here};

我尝试将它作为 routes.myFunction 粘贴在 app.configure 块中。我尝试在路由中将其更改为myfunction() { code},然后在配置块中将其称为routes.myfunction(),但也没有运气。该函数需要保留在包含我的路由的文件中,因为它在那里更改了一些全局变量。

我知道这是一些愚蠢的简单语法,但我似乎无法在here 或谷歌上找到任何提示。非常感谢您的帮助!

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    使用这个事件:

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

    说实话,express.createServer() 返回的app 只是http.Server,所以nodejs docs related to http.Server 中描述的所有内容对于express 和railwayjs 都有意义。

    【讨论】:

    • 太棒了!这正是我需要的 =)
    • 它对我不起作用。我认为这与生成器中的www 文件已经有listening 事件有关?
    【解决方案2】:

    我会保持简单。在您调用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

    【讨论】:

    • 嗯,还是没有运气。我没有得到任何迹象表明该函数实际上正在运行,但也没有错误。 =/
    • “导出它以便您的主 server.js 模块可以在启动时调用它”是什么意思?请原谅我是 express/javascript 的新手
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2013-04-05
    • 2010-11-29
    相关资源
    最近更新 更多