web-dev-qa-db-ja.com

node-expressサーバーを適切に閉じる方法は?

_/auth/github/callback_ urlからコールバックを取得した後、サーバーを閉じる必要があります。通常のHTTP API現在、サーバーのクローズは server.close([callback]) API関数でサポートされていますが、node-エクスプレスサーバーで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();

63

app.listen()は_http.Server_を返します。 appインスタンスではなく、そのインスタンスでclose()を呼び出す必要があります。

例.

_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_

85

Express v3では、この機能は削除されました。

app.listen()関数の結果を割り当て、それに近いものを適用することで、同じことを実現できます。

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

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

39
Michael

エクスプレスアプリでエラーが発生した場合は、サーバーを閉じる必要があり、以下のようにできます。

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

エラーが発生すると、アプリケーションはSIGTERMという名前の信号を取得します

ここでノード信号の詳細を読むことができます-

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