Node.js でプロキシっぽいの

Node.js を使って、任意のWebサーバからコンテンツを取ってくるコードを書きました。しかし、その後に手を出した jsdom モジュールでは直接コンテンツを取得出来る(jsdom に渡すためにこれ書いたのに)という・・・
それはさておき。初めて Node.js を触ってそれなりに苦労したし、connect モジュール使ったサンプルコードはあまりないかも?ということでここに残しておきます。

var
  connect = require('connect'),
  http = require('http'),
  url = require('url'),
  target_url;

connect()
  .use(connect.logger('dev'))
  .use(function(req, res, next) {
    // do something
    next(); // required !!!
  })
  .use(function(req, res) { // 'next' not required
    var paths = req.url.split('/')
    if (paths.length > 1) target_url = decodeURIComponent(paths[1]);
    var target = url.parse(target_url);
    var request = http.get(
      target_url,
      function(response) {
        var buf = [];
        response
          .on('data', function(chunk) {
            buf.push(chunk);
          })
          .on('end', function() {
            var content = buf.join();
            res.end(content);
          })
          .on('error', function(e) {
            console.error('ERROR: ' + e.message);
          });
      }
    ).on('error', function(e) {
      console.error('ERROR: ' + e.message);
    });
  })
  .listen(3000);

動作確認は・・・

$ node (ファイル名).js

の後、ブラウザから

http://(IPアドレス。"localhost"不可):3000/http%3A%2F%2Fweather.yahoo.co.jp%2Fweather%2F/

とかで。
必要無いコードも含まれていますが、Node.jsの使い方の参考になれば。
返ってきたコンテンツに含まれる相対URLのファイルが取得出来なかったり、charsetがUTF-8じゃないと文字化けしたりと改善の余地はいろいろありますが、そこはよしなに。