第1回の勉強会で重要だった点の一つは server.close() の挙動でした。 今回は、この server.close() の挙動についての課題です。
A君は、ブラウザで1回閲覧したら HelloWorld のWebサーバが終了するプログラムを作ろうと hello.js を作りました。 だけど Chrome でアクセスすると下のようなエラーになってしまい、プログラムが正常に終了しません。
なぜエラーが発生したのかその理由を記述しなさい。
このプログラムを修正してエラーが発生せずA君がやりたかったプログラムを作りなさい。
gist か ブログかに記載して、URLをメーリングリストに連絡してください。
##提出期限
次回勉強会開催まで。(その前に出そろえば答え合わせでもしましょうか)
> node hello.js
Server running at http://localhost:8080/
net.js:1046
throw new Error('Not running');
^
Error: Not running
at Server.close (net.js:1046:11)
at Server.<anonymous> (/home/ohtsu/hello.js:5:10)
at Server.EventEmitter.emit (events.js:99:17)
at HTTPParser.parser.onIncoming (http.js:1807:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
at Socket.socket.ondata (http.js:1704:22)
at TCP.onread (net.js:403:27)
課題1の回答
server.close()
を2度呼び出したから.ブラウザはfaviconも取ろうとして2回接続する.課題2の回答
connection
イベントでserver.close()
を呼び出す.あとは HTTPのレスポンスヘッダにConnection: close
を追加するか, レスポンスを返した後にHTTPリクエストのソケットを閉じる.