

ドットインストールという動画サイトでNode.jsの勉強を始めています。  
とりあえず動画を見てしまおうとまだ、環境は作っていません。

こちらの動画  
<http://dotinstall.com/lessons/basic_nodejs/26207>  
でURLごとに処理を振り分ける方法が紹介されているのですが、プログラム上なぜこうなるのかがさっぱりわかりません。

192.168.000.000/1338/about  
と入れるとスイッチでurlにaboutが入っているのでその処理が実行されているということはなんとか分りました。  
しかし、/aboutを付けた時点でnode.jsがあるフォルダの中のaboutフォルダのindex.htmlを探してそのファイルは準備されていないので403エラーが出るのではないかと思いました。

なぜ下階層を読みに行かずにルートのjsファイルを読み込むのでしょうか？


CC BY-SA 3.0
2015-07-24T00:02:07.403
12631
2016-03-01T08:48:05.397
8823
question
javascript node.js
Node.jsのURLごとに処理を変える方法


Node.jsにはドキュメントルートの概念が無いからです。  
例えばApacheやTomcatであれば、ドキュメントルート以下のディレクトリやファイルの構造がURLとマッピングされていますが、Node.jsではマッピングを自分で行う必要があります。


CC BY-SA 3.0
2015-07-24T06:56:30.280
12640
2015-07-24T06:56:30.280
6105
12631
answer


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ファイルをそのまま返したかったら、それをプログラムでちゃんと書いてあげないといけません。それこそが醍醐味で、データベースを使えたり、計算をしたりできるわけです。  
ここで挙げた基本を考えながら、いろいろ試してみてはいかがでしょうか。


CC BY-SA 3.0
2015-08-04T04:44:01.753
13014
2015-08-04T04:44:01.753
968
12631
answer