カンニングしました!
リクエストが複数飛んでいる事までは確認できたのですが、対処方法が上手くいかず。。。
一応、勉強した事のまとめと言う事で提出しておきます。
用語とかブレているかもしれませんが、駆け出しなのでご容赦下さいまし!
Not running at Server.close
というエラーメッセージから、サーバーが終了した後にもう一度Server.close()
を呼び出しているであろう事が分かります。
実際に、console.log(req.url)
としてリクエストのURLを確認してみると、"/"へのアクセスの後、"/favicon.ico"へのアクセスが発生している様です。
これはServer.close()
が、公式ドキュメントにて、
サーバが新しい接続を受け付けるのを終了しますが、既存の接続は維持します。
と説明されている動作を取る事に起因します。
つまり、"/"へのアクセスで得た接続はServer.close()
した後も生きており、それを利用して"/favicon.ico"へのアクセスが行われ、その際にもう一度呼び出されてしまっているという事です。
また、二度目のServer.close()
が問題になるのは、エラーメッセージにある通りnode/lib/net.jsの1064行目あたりを覗いてみると、
> node/lib/net.js
Server.prototype.close = function(cb) {
if (!this._handle) {
// Throw error. Follows net_legacy behaviour.
throw new Error('Not running');
}
if (cb) {
this.once('close', cb);
}
this._handle.close();
this._handle = null;
this._emitCloseIfDrained();
とある事から、最初の"/"への呼び出しでthis._handle
がnullにセットされていた為だと分かります。
http.Serverの'connection'イベントにてServer.close()しておく事で、以降新しい接続を受け付けなくする。
さらに、http.ServerRequestの'end'イベントにて、既存の接続を終了させる。