9

ノードのドキュメントでは、http サーバーには close イベントがあるようです:

イベント: 「閉じる」

function () { }

サーバーが閉じるときに発行されます。

しかし、それをトリガーする方法がわかりません:

// server.js

var http = require('http');
var server = http.createServer();
server.on('close', function() {
  console.log(' Stopping ...');
});
server.listen(8000);

「停止しています...」というメッセージを期待しました

$ node server.js
^C Stopping ...
$ 

でもその代わり何もない

$ node server.js
^C$ 

ここで閉じるとは別の意味ですか?

4

4 に答える 4

27

でサーバーを強制Ctrl+C終了しても、サーバーはそれ自体を閉じることができません。あなたはこれを自分でしなければなりません。このような方法でうまくいくはずです (UNIX ライクなシステムの場合):

var http = require('http');
var server = http.createServer();
server.on('close', function() {
  console.log(' Stopping ...');
});

process.on('SIGINT', function() {
  server.close();
});

server.listen(8000);

HTTP サーバーが閉じ、ノードが保留中の可能性のある非同期操作がないことを認識すると、プロセスは自動的に停止します。イベントループに他のもの (タイマーなど) があり、サーバーが閉じた後にイベントループを強制的に停止したい場合closeは、コールバックを受け取ります:

process.on('SIGINT', function() {
  server.close(function() {
    process.exit(0);
  });
});
于 2013-09-09T07:07:58.623 に答える
4

You added an event handler for close. Use server.close(); to trigger the server event.

于 2013-09-09T08:03:57.067 に答える