Подтвердить что ты не робот

Как правильно закрыть сервер node -express?

Мне нужно закрыть сервер после получения обратного вызова из /auth/github/callback URL-адрес. С обычным HTTP API закрытие сервер в настоящее время поддерживает server.close([callback]) API, но с node -express server im get TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' ошибка. И я не знаю, как найти информацию для решения этой проблемы.
Как закрыть экспресс-сервер?

Замечания по конфигурации NodeJS:

$ node --version
v0.8.17
$ npm --version
1.2.0
$ npm view express version
3.0.6

Фактический код приложения:

var app = express();

// configure Express
app.configure(function() {
    // … configuration
});

app.get(
    '/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/');

        setTimeout(function () {
            app.close();
            // TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close'
        }, 3000)
    }
);

app.listen('http://localhost:5000/');

Кроме того, я нашел 'nodejs express close..., но я не уверен, могу ли я использовать его с кодом, который у меня есть: var app = express();.

4b9b3361

Ответ 1

app.listen() возвращает http.Server. Вы должны вызывать close() в этом экземпляре, а не в экземпляре app.

Исх.

app.get(
    '/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/');

        setTimeout(function () {
            server.close();
            // ^^^^^^^^^^^
        }, 3000)
    }
);

var server = app.listen('http://localhost:5000/');

Вы можете проверить источники: /node_modules/express/lib/application.js

Ответ 2

В выражении v3 они удалили эту функцию.

Вы все равно можете добиться того же, присвоив результат функции app.listen() и примените к нему близко:

var server = app.listen(3000);
server.close()

https://github.com/visionmedia/express/issues/1366

Ответ 4

Если в вашем экспресс-приложении возникает какая-либо ошибка, вам необходимо закрыть сервер, и вы можете сделать это, как below-

var app = express();
var server = app.listen(process.env.PORT || 5000)

Если возникает какая-либо ошибка, наше приложение получит сигнал с именем SIGTERM

Вы можете прочитать больше о сигнале узла here-

https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html

process.on('SIGTERM', () => {
  console.info('SIGTERM signal received.');
  console.log('Closing http server.');
  server.close(() => {
    console.log('Http server closed.');
  });
});