如何知道node.js表示服务器何时启动并可以使用

有一个应用程序,我想启动一个节点快递服务器,然后在服务器启动后自动在同一台计算机上启动浏览器。 我如何查询服务器是否启动并准备就绪? 我真的想要在.listen调用上有某种callback,但似乎不是。 我可以等待的时间比我想象中的要长,但是这个设备将会在现场,所以我要么等待很长的时间才能确保在启动浏览器之前启动并运行或者如果页面没有正确加载,请让用户足够聪明地进行刷新。 这些都不是我的好select。 。 。

我在线阅读API,但没有看到这样的事情。 当然有一个技巧,我不知道可以做到这一点。

如果节点HTTP API(它有一个callback,告诉我有关监听事件)是expression对象的基础,也许有没有logging的快速呼叫监听的callback选项。 或者我应该知道它在那里。

任何帮助将不胜感激。

Express app.listen函数确实支持callback。 它将您传递的参数映射到http.listen调用。

app.listen = function(){ var server = http.createServer(this); return server.listen.apply(server, arguments); }; 

所以你可以调用: app.listen(port, callback);

或者你可以直接使用http.listen。

 var app = require('express')(), server = require('http').createServer(app); server.listen(80, function() { console.log('ready to go!'); }); 

您可以使用http.listen方法,该方法具有一个服务器就绪后触发的callback函数:

 http.createServer(app).listen(app.get('port'), function () { console.log('Printed when ready!!!'); }); 

请参阅Node.js上的官方参考:

http://nodejs.org/api/all.html#all_server_listen_port_hostname_backlog_callback

http://nodejs.org/api/all.html#all_server_listen_path_callback_1

http://nodejs.org/api/all.html#all_server_listen_handle_callback_1

正如许多人所提到的, listen函数(在快速应用程序或http服务器上都支持它)确实支持callback,并且可以让您的节点知道它在监听的时间。

因此,如果您打算从快速应用程序中启动浏览器,请在此处执行此操作,并且您很好。 但是,如果您从外部脚本启动快速应用程序,然后希望该外部脚本打开浏览器,则节点callback并不真正为您购买任何东西。

在等待一个好的HTTP响应时,等待stdout上的一些魔术string并不是一个真正的改进。 你可以直接使用curl的try / backoff / timeout循环,直到获得成功的响应。

您可以在服务器启动后触发自定义事件:

 // server.js const express = require('express'); const app = express(); modeule.export = app; app.listen(3000, () => { app.emit('listened', null) }); 

在一个单独的模块中,应用程序可以收听您的自定义事件:

 // custom.js const server = require('server.js'); server.on('listened', function() { console.log('The server is running!'); });