2013-01-25 14 views
39

Muszę zamknąć serwer po otrzymaniu oddzwonienia z adresu URL /auth/github/callback . Ze zwykłej HTTP API zamykanie serwerze jest obecnie wsparcie ze server.close([callback]) funkcji API, ale z serwera węzła-express Dostaję 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?Jak poprawnie zamknąć serwer węzła ekspresowe?

NodeJS notatki konfiguracji:

$ 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 express close…’ ale nie jestem pewien, czy mogę używać go z kodem mam: var app = express(); .

Odpowiedz

49

zwraca http.Server. Powinieneś wywołać close() w tej instancji, a nie w instancji app.

Przykł.

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

Można sprawdzać źródła: /node_modules/express/lib/application.js

+3

Dziwne, że nie zamyka, jeśli dostęp do niektórych trasą. –

+1

@dzień, również tego doświadczyłem. Dowiedziałem się, że moja przeglądarka ma stałe połączenie HTTP1.1, więc kiedy nacisnąłem F5, wyglądało to tak, jakby serwer się nie zamknął. Jeśli spróbujesz innej przeglądarki, zobaczysz, że gniazdo serwera nie działa. –