node.jsの練習(v0.4対応)

v0.3.6でhttp.request() と http.get()が導入された。
http.Clientインスタンスを作成しclient.request()を呼ぶ従来のインターフェイスは非推奨とのこと。

var http = require('http');

http.createServer(function (req, res) {
	var proxy_headers = req.headers,
		proxy_req,
		options;

	function _options() {
		var host = req.headers.host,
			h, _host, _port;
		if(host.indexOf(':') > 0){
			h = host.split(':');
			_host = h[0];
			_port = parseInt(h[1],10);
		} else {
			_host = host;
			_port = 80;
		}
		return {
			host: _host,
			port: _port,
			method: req.method,
			path: req.url,
			headers: req.headers
		};
	}

	function _proxy_response(proxy_res) {
		var headers = proxy_res.headers;
		res.writeHead(proxy_res.statusCode, headers);
		proxy_res.on('data', function(chunk) { res.write(chunk); });
		proxy_res.on('end', function() { res.end(); });	
	}

	options = _options(proxy_headers.host);

	if (req.method === 'GET'){
		proxy_req = http.get(options, _proxy_response);
	} else if(req.method === 'POST'){
		proxy_req = http.request(options, _proxy_response);
		req.on('data',function(chunk){ proxy_req.write(chunk); });
		req.on('end',function(){
			proxy_req.end();
		});
	}

}).listen(8080, "localhost");