Как узнать, когда node.js express server готов и готов к использованию

У вас есть приложение, в котором я хочу запустить экспресс-сервер node, а затем запустим браузер на том же компьютере автоматически, как только сервер заработает. Как я могу запросить, готов ли сервер к работе? Я действительно хотел, чтобы был какой-то обратный вызов в вызове .listen, но, похоже, это не так. Я мог бы подождать дольше, чем я ожидаю, сколько времени, но это идет на оборудование, которое будет в поле, так что я либо должен ждать нелепое количество времени, чтобы убедиться, что я работаю, прежде чем выходить из браузера или пользователь должен быть достаточно умным, чтобы нажать обновление, если страница не загружается правильно. Ни один из них не является хорошим вариантом для меня.,

Я читаю API онлайн, но не вижу ничего подобного. Конечно, есть трюк, который я не знаю, что может это сделать.

Если api node HTTP (который имеет обратный вызов и сообщает мне о событии прослушивания), является базой для экспресс-объекта, возможно, есть функция обратного вызова для прослушивания экспресс-вызовов, которая не документирована. Или, возможно, я должен просто знать, что это там.

Любая помощь будет принята с благодарностью.

Ответы

Ответ 1

Функция Express app.listen поддерживает обратный вызов. Он отображает аргументы, которые вы передаете на вызов 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!');
});

Ответ 2

Вы можете использовать метод 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

Ответ 3

Как уже упоминалось, функция listen (в экспресс-приложении или на сервере http, поддерживающая ее) поддерживает обратный вызов, который позволит вашему процессу node узнать, когда он прослушивает.

Итак, если вы планируете запустить браузер из своего экспресс-приложения, сделайте это там, и вы добры. Однако, если вы запускаете экспресс-приложение из внешнего script, а затем хотите, чтобы внешний script открывал браузер, обратный вызов node на самом деле ничего не покупает.

Ожидание какой-либо магической строки на stdout на самом деле не является улучшением только ожидания хорошего ответа HTTP. Вы можете просто использовать цикл try/backoff/timeout с curl, пока не получите успешный ответ.

Ответ 4

Вы можете запустить настраиваемое событие после запуска сервера:

// 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!');
});