我有一个应用程序,我想在其中启动一个node express服务器,然后一旦服务器启动,就在同一台机器上自动启动浏览器。如何查询服务器是否已启动并准备就绪?我真的希望在.listen调用上有某种回调,但似乎没有。我可以等待比我预期的时间更长的时间,但是这是在现场的设备上进行的,所以在启动浏览器之前,我必须等待一段荒谬的时间来确保我已经启动并运行,或者让用户足够聪明地在页面加载不正确的情况下点击刷新。对我来说,这两个都不是好的选择。。。
我在网上阅读了API,但没有看到类似这样的东西。当然,有一个我不知道的技巧可以做到这一点。
如果节点HTTP api (它有一个回调并告诉我侦听事件)是express对象的基础,那么可能有一个没有文档记录的express call listen的回调选项。或者我应该知道它就在那里。
任何帮助都将不胜感激。
发布于 2013-08-15 04:28:56
您可以使用http.listen
方法,该方法有一个回调函数,在服务器准备就绪时触发:
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
发布于 2013-08-15 04:35:48
正如许多人提到的,listen
函数(在express应用程序或http服务器上,两者都支持它)确实支持回调,这将让您的节点进程知道它何时正在侦听。
因此,如果你计划在express应用程序中启动浏览器,那么在那里就可以了。但是,如果您从外部脚本启动express应用程序,然后希望该外部脚本打开浏览器,那么节点回调并不会真正为您带来任何好处。
在stdout上等待一些神奇的字符串并不是仅仅等待一个好的HTTP响应的真正改进。在获得成功响应之前,您也可以对curl
使用try/backoff/timeout循环。
发布于 2016-01-19 17:12:21
您可以在服务器启动后触发自定义事件:
// 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!');
});
https://stackoverflow.com/questions/18241494
复制相似问题