Search code examples
javascriptnode.jsexpresswebserver

How to properly close Node.js Express server?


I need to close server after getting callback from /auth/github/callback url. With usual HTTP API closing server is currently supporting with server.close([callback]) API function, but with node-express server i’m getting TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' error. And I don't know how to find information to solve this problem.
How should I close express server?

NodeJS configuration notes:

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

Actual application code:

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

Also, I have found ‘nodejs express close…’ but I don't sure if I can use it with code I have: var app = express();.


Solution

  • app.listen() returns http.Server. You should invoke close() on that instance and not on 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/');
    // ^^^^^^^^^^
    

    You can inspect sources: /node_modules/express/lib/application.js