web-dev-qa-db-fra.com

comment fermer correctement le serveur node-express?

Je dois fermer le serveur après avoir reçu le rappel de l'URL /auth/github/callback. Avec l'habitude API HTTP le serveur de fermeture prend actuellement en charge avec server.close([callback]) API mais avec le serveur node-express, j'obtiens une erreur TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close'. Et je ne sais pas comment trouver des informations pour résoudre ce problème.
Comment fermer le serveur express?

Notes de configuration de NodeJS:

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

Code d'application réel:

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

De plus, j’ai trouvé ‘nodejs express close…’ mais je ne sais pas si je peux l’utiliser avec le code que j’ai: var app = express();.

63
Vladimir Starkov

app.listen() renvoie http.Server. Vous devez invoquer close() sur cette instance et non sur app instance.

Ex.

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

Vous pouvez inspecter les sources: /node_modules/express/lib/application.js

85
Vladimir Kuznetsov

Dans express v3, ils ont supprimé cette fonction.

Vous pouvez toujours obtenir le même résultat en affectant le résultat de la fonction app.listen() et en l'appliquant de près:

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

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

39
Michael

Si une erreur se produit dans votre application express, vous devez fermer le serveur et vous pouvez le faire comme ci-dessous-

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

Si une erreur se produit, notre application recevra un signal nommé SIGTERM

Vous pouvez en savoir plus sur le signal du nœud ici-

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.');
  });
});
0
Neha Sharma