Muszę zamknąć serwer po otrzymaniu oddzwaniania z /auth/github/callback
adresu URL. W przypadku zwykłego serwera zamykającego HTTP API obecnie obsługuje server.close([callback])
funkcję API, ale w przypadku serwera node-express otrzymuję TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close'
błąd. I nie wiem, jak znaleźć informacje, aby rozwiązać ten problem.
Jak zamknąć serwer ekspresowy?
Uwagi dotyczące konfiguracji NodeJS:
$ node --version
v0.8.17
$ npm --version
1.2.0
$ npm view express version
3.0.6
Rzeczywisty kod aplikacji:
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/');
Również znalazłem „nodejs wyrazić blisko ...” ale nie mam pewności, czy mogę używać go z kodem mam: var app = express();
.
app
zamiast tego dzwoniłem bliskoserver
. Uratowałem mój dzień. Wielkie dzięki 👍W express v3 usunęli tę funkcję.
Nadal możesz osiągnąć to samo, przypisując wynik
app.listen()
funkcji i stosując go blisko:var server = app.listen(3000); server.close()
https://github.com/visionmedia/express/issues/1366
źródło
Jeśli w twojej aplikacji ekspresowej wystąpi jakikolwiek błąd, musisz zamknąć serwer i możesz to zrobić jak poniżej:
var app = express(); var server = app.listen(process.env.PORT || 5000)
Jeśli wystąpi jakikolwiek błąd, wówczas nasza aplikacja otrzyma sygnał o nazwie
SIGTERM
Możesz przeczytać więcej o sygnale węzła tutaj-
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.'); }); });
źródło
Wiele razy odpowiadałem na różne warianty „jak zakończyć działanie serwera HTTP” node.jskanały wsparcia. Niestety nie mogłem polecić żadnej z istniejących bibliotek, ponieważ w jakiś sposób im brakuje . Od tego czasu stworzyłem pakiet, który (jak sądzę) obsługuje wszystkie przypadki oczekiwane od pełnego wdzięku zakończenia serwera HTTP (S) express.js.
https://github.com/gajus/http-terminator
Główną zaletą terminatora http :
źródło