iq29 diary

EG.LAB 開発日記

素のNode.jsでCSSやJSなどの静的ファイルが読み込めない

素のNode.jsでCSSやJSなどの静的ファイルが読み込めない

Node.js でサーバーを立ち上げるとき、Apache などと違ってドキュメントルートから静的ファイルを読み込むってことを自動でやってくれない。 サーバーにリクエストされた静的ファイルのパスから拡張子を判定してレスポンスを返してあげないといけない。

server.on("request", function (req, res) {
  // リクエストされた拡張子をまず判定する
  chkExt(req, res, function () {
    switch (req.url) {
      case "/":
        // なにかしらの処理
        break
      default:
        // なにかしらの処理
        break;
    }
  });
});

var chkExt = function (req, res, callback) {
  var url = req.url;
  var tmp = url.split('.');
  var ext = tmp[tmp.length - 1];
  var path = '.' + url;
  switch (ext) {
    case 'js':
      fs.readFile(path, function (err, data) {
        res.writeHead(200, {
          "Content-Type": "text/javascript"
        });
        res.end(data, 'utf-8');
      });
      break;
    case 'css':
      fs.readFile(path, function (err, data) {
        res.writeHead(200, {
          "Content-Type": "text/css"
        });
        res.end(data, 'utf-8');
      });
      break;
    default:
      callback();
  }
}

意外と使い勝手がいいソース転がってなかったので書いてみた。