それとも1つ起動しておけば、同じポート番号を使用した(?)jsファイルは自動的に使用できるのでしょうか。
アプリケーションはOSに「このポート番号使いたいんだけど開いてる?」というお伺いを立てに行きます。
そしてOSに貸し出してもらう仕組みになっています。
なので1つのNode.jsのアプリが起動している場合、2個目の別のアプリが同じポート番号を借りようと思っても既に貸出済みなので借りる事が出来ずにエラーになるはずです。
ではどうすればいいか?
- 80番ポートを持つ代表を用意して、4000番みたいな適当な別ポート番号に中継
- そのJSファイルで色々なアクセスをさばけるようにする
前者の仕組みをリバースプロキシと呼びます。
最近はNginxなどのサーバアプリが主流ですね。
しかし、Node.jsでやるならばメインは後者です。
WebサーバにHTTPリクエストが飛んできた場合、私はこのパスに向かってリクエストを飛ばしているんだよというURL文字列も格納されています。
ApacheやNginxなどの静的ファイル配信サーバは、このパスとマシン内の特定のディレクトリを紐づけている想定でHDD内を漁って見つけたファイルの文字列を返すような設計になっています。
Node.jsの場合はrequest
引数の中にそれらの情報が格納されているはずですので、
それらを使ってif文などで分岐させてやれば複数の挙動を定義できます。
Node.js: get path from the request
JavaScript
1var http = require('http');
2var url = require('url');
3var fs = require('fs');
var neededstats = [];
http.createServer(function(req, res) {
if (req.url == '/index.html' || req.url == '/') {
fs.readFile('./index.html', function(err, data) {
res.end(data);
});
} else {
var p = __dirname + '/' + req.params.filepath;
fs.stat(p, function(err, stats) {
if (err) {
throw err;
}
neededstats.push(stats.mtime);
neededstats.push(stats.size);
res.send(neededstats);
});
}
}).listen(8080, '0.0.0.0');
console.log('Server running.');
えー、まじかよif文で区切るとか縄文時代かよ
みたいな話ですので、実際にはhttpモジュールをラップしたExpress.jsを使う事が多いですね。
こっちならば賢くパスで区切るようにアクセスが捌けるのでコードがかなり綺麗になります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/26 08:06
2018/09/26 09:23