質問: ドットインストールという動画サイトでNode.jsの勉強を始めています。 とりあえず動画を見てしまおうとまだ、環境は作っていません。 こちらの動画 でURLごとに処理を振り分ける方法が紹介されているのですが、プログラム上なぜこうなるのかがさっぱりわかりません。 192.168.000.000/1338/about と入れるとスイッチでurlにaboutが入っているのでその処理が実行されているということはなんとか分りました。 しかし、/aboutを付けた時点でnode.jsがあるフォルダの中のaboutフォルダのindex.htmlを探してそのファイルは準備されていないので403エラーが出るのではないかと思いました。 なぜ下階層を読みに行かずにルートのjsファイルを読み込むのでしょうか?
回答: Web サーバーは、基本的に「リクエストを受け取って」「レスポンスを返す」というものです。例えば、例のURIの場合は、192.168.000.000サーバーの1338版のポートに、/aboutをくださいというリクエストを送っています。URIの中に宛先と内容が混ざっているのです。 まず重要なのは、1338版のポートにリクエストを送ったら、誰が受け取るかという話です。ApacheなどのWebサーバーが受け取るのが典型的ですが、今回はnode.jsのプログラムが受け取っています。なので、node.jsのプログラムが常に動いていて、リクエストは全てそこで処理をします。その場合、Apacheはそれに関与しません。組み合わせる場合もありますが、この場合は一切関係ありません。 Apacheのように、HTMLファイルや画像などをどこかのディレクトリに置いて公開する形では、リクエストの中でもURIの後半部分をファイルの置き場所だと判断し、レスポンスとしてそのファイルの内容を返します。ついでに、htmlファイルを指定していなかったら、index.htmlを探してきてくれる便利機能もあります。 一方、node.jsなどプログラムが何か処理をやってリクエストとレスポンスを扱う場合(Webアプリケーション)では、プログラムがリクエスト(URI、POSTの中身など)を受け取ったら、それをどう扱ってもよいのです。逆に、例えばHTMLファイルをそのまま返したかったら、それをプログラムでちゃんと書いてあげないといけません。それこそが醍醐味で、データベースを使えたり、計算をしたりできるわけです。 ここで挙げた基本を考えながら、いろいろ試してみてはいかがでしょうか。