[node.js]静的コンテンツを表示するWEBサーバー
ローカルでちょっとしたテストを行いたいときなどに。
実行するとカレントディレクトリをルートディレクトリとしたWEBサーバーがローカルで起動します。
下位フォルダなどに置かれたコンテンツにもアクセスできます。
ついでにJSONファイルなどには、ヘッダーに「Access-Control-Allow-Origin」を付加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
var http = require("http"), url = require("url"), path = require("path"), fs = require("fs"), port = process.argv[2] || 8888; http.createServer(function(request, response) { var Response = { "200":function(file, filename){ var extname = path.extname(filename); var header = { "Access-Control-Allow-Origin":"*", "Pragma": "no-cache", "Cache-Control" : "no-cache" } response.writeHead(200, header); response.write(file, "binary"); response.end(); }, "404":function(){ response.writeHead(404, {"Content-Type": "text/plain"}); response.write("404 Not Found\n"); response.end(); }, "500":function(err){ response.writeHead(500, {"Content-Type": "text/plain"}); response.write(err + "\n"); response.end(); } } var uri = url.parse(request.url).pathname , filename = path.join(process.cwd(), uri); fs.exists(filename, function(exists){ console.log(filename+" "+exists); if (!exists) { Response["404"](); return ; } if (fs.statSync(filename).isDirectory()) { filename += '/index.html'; } fs.readFile(filename, "binary", function(err, file){ if (err) { Response["500"](err); return ; } Response["200"](file, filename); }); }); }).listen(parseInt(port, 10)); console.log("Server running at http://localhost:" + port ); |
実行
1 |
$ node server.js |
D3.jsのcsvメソッドなんかはセキュリティの関係でローカルのファイルを読めない(chromeの起動オプションとかで回避できるみたいだけど)ので、シンプルなwebサーバーがあると重宝します。