Как узнать, когда 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!');
});