diff --git a/lib/node-proxy.js b/lib/node-proxy.js index 5d1a2e7..85d5c42 100644 --- a/lib/node-proxy.js +++ b/lib/node-proxy.js @@ -45,14 +45,14 @@ exports.NodeProxy.prototype = { this.events = []; this.onData = function () { - self.events.push(["data"].concat(self.toArray(arguments))); + self.events.push(['data'].concat(self.toArray(arguments))); }; this.onEnd = function () { - self.events.push(["end"].concat(self.toArray(arguments))); + self.events.push(['end'].concat(self.toArray(arguments))); }; - req.addListener("data", this.onData); - req.addListener("end", this.onEnd); + req.addListener('data', this.onData); + req.addListener('end', this.onEnd); }, proxyRequest: function (server, port, req, res) { @@ -67,45 +67,45 @@ exports.NodeProxy.prototype = { var reverse_proxy = c.request(req.method, req.url, req.headers); // Add a listener for the connection timeout event - reverse_proxy.connection.addListener('error', function(err) { + reverse_proxy.connection.addListener('error', function (err) { res.writeHead(200, {'Content-Type': 'text/plain'}); if(req.method !== 'HEAD') { - res.write('Not a HEAD request'); + res.write('An error has occurred: ' + sys.puts(JSON.stringify(err))); } res.end(); }); // Add a listener for the reverse_proxy response event - reverse_proxy.addListener("response", function (response) { + reverse_proxy.addListener('response', function (response) { // Set the response headers of the client response res.writeHead(response.statusCode, response.headers); // Add event handler for the proxied response in chunks - response.addListener("data", function (chunk) { + response.addListener('data', function (chunk) { if(req.method !== 'HEAD') { res.write(chunk, 'binary'); - this.body += chunk; + self.body += chunk; } }); // Add event listener for end of proxied response - response.addListener("end", function () { + response.addListener('end', function () { + // Remark: Emit the end event for testability + self.emitter.emit('end', null, self.body); + res.end(); }); }); // Chunk the client request body as chunks from the proxied request come in - req.addListener("data", function (chunk) { + req.addListener('data', function (chunk) { reverse_proxy.write(chunk, 'binary'); }) // At the end of the client request, we are going to stop the proxied request - req.addListener("end", function () { - // Remark: Emit the end event for testability - self.emitter.emit('something', self.body); - + req.addListener('end', function () { reverse_proxy.end(); }); diff --git a/test/node-proxy-test.js b/test/node-proxy-test.js index 123667d..fd5dddd 100644 --- a/test/node-proxy-test.js +++ b/test/node-proxy-test.js @@ -8,6 +8,7 @@ var vows = require('vows'), sys = require('sys'), + eyes = require('eyes'), assert = require('assert'), http = require('http'); @@ -19,7 +20,7 @@ var NodeProxy = require('node-proxy').NodeProxy; // Simple 'hello world' response for test purposes // var helloWorld = function(req, res) { - res.sendHeader(200, {'Content-Type': 'text/plain'}); + res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('hello world') res.end(); }; @@ -54,22 +55,20 @@ var startProxyTest = function () { return proxy; }; -var proxy = startProxyTest(); -proxy.emitter.addListener('something', function (body) { - sys.puts(body); -}) -/*vows.describe('node-proxy').addBatch({ +vows.describe('node-proxy').addBatch({ "When an incoming request is proxied to the helloNode server" : { topic: function () { + // Create the proxy and start listening var proxy = startProxyTest(); proxy.emitter.addListener('end', this.callback); + var client = http.createClient(8080, '127.0.0.1'); - client.request('GET', '/'); + var request = client.request('GET', '/'); + request.end(); }, - "it should received 'hello world'": function (num) { - sys.puts('got callback'); - //assert.equal(body, 'hello world'); + "it should received 'hello world'": function (err, body) { + assert.equal(body, 'hello world'); } } -}).export(module);*/ \ No newline at end of file +}).export(module); \ No newline at end of file