Node.jsでCORS対応簡易サーバを用意するには

Angular2を使ってWebサーバからデータを取得してみた | hiro345」では、Python3が楽だったので採用しましたが、Node.jsでもWebサーバーは用意できます。npmのパッケージにあるconnectやserve-staticを使うと良さそうでしたが、package.jsonを使ったりするのを説明するのも面倒なので、素のNode.jsでCORS対応簡易サーバを実装する方法を調べてみました。

ヘッダーを設定して、ファイルを読み込んで返しています。画像ファイルよりJavaScriptの”.js”などに対応をした方がいいのでしょうが、こんな感じ、というのがわかればいいので、こうしてあります。

var http = require("http");
var fs = require('fs');
var path = require('path');

var server = http.createServer(function (req, res) {
  console.log('request starting...');
  res.setHeader('Access-Control-Allow-Origin', '*')
  res.setHeader('Access-Control-Request-Method', '*')
  res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET')
  res.setHeader('Access-Control-Allow-Headers', '*')
  var filePath = '.' + req.url;
  if (filePath == './') {
    filePath = './index.html';
  }
  var extname = path.extname(filePath);
  var contentType = 'text/html';
  switch (extname) {
    case '.json':
      contentType = 'application/json';
      break;
    case '.png':
      contentType = 'image/png';
      break;
  }
  fs.readFile(filePath, function(error, content) {
    if (error) {
      if(error.code == 'ENOENT'){
        res.writeHead(404);
        res.end('404 Not found', 'utf-8');
      } else {
        res.writeHead(500);
        res.end('500 Internal Error: '+error.code+'\n');
        res.end();
      }
    } else {
        res.writeHead(200, { 'Content-Type': contentType });
        res.end(content, 'utf-8');
    }
  });
});
server.listen(process.env.PORT || 8000, function () {
  console.log('Server running ...');
});
同じタグの記事: node.js
同じカテゴリの記事: Linux
関連書籍: node.js