diff --git a/examples/simple/my_plugin.js b/examples/simple/my_plugin.js index 956683a..4cf983f 100644 --- a/examples/simple/my_plugin.js +++ b/examples/simple/my_plugin.js @@ -19,27 +19,25 @@ my_plugin.prototype.set_time = function(request, server, done){ my_plugin.prototype.add_headers = function(request, server, done){ var time = request.current_time; - request.extra_headers = { - request_time: time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds(), - }; + request.addHeader("request_time", time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds()); done(); }; my_plugin.prototype.handle_test = function(request, server, respond){ - respond(200, "thanks for visiting /test", request.extra_headers); + respond(200, "thanks for visiting /test"); }; my_plugin.prototype.handle_root = function(request, server, respond){ - respond(200, "check out /test", request.extra_headers); + respond(200, "check out /test"); }; my_plugin.prototype.no_respond = function(request, server, respond){ - request.extra_headers.no_respond = "true"; + request.addHeader("no_respond", "true"); respond(); }; my_plugin.prototype.not_found = function(request, server, respond){ - respond(404, "couldn't find handler for url: " + request.url, request.extra_headers); + respond(404, "couldn't find handler for url: " + request.url); }; module.exports = my_plugin; diff --git a/lib/server.js b/lib/server.js index b3aebb6..b350c10 100644 --- a/lib/server.js +++ b/lib/server.js @@ -5,11 +5,11 @@ var yaps_plugin = require("./plugin.js"); var handler_chain = function(handlers, request, server, response, not_found){ if(handlers.length){ - handlers[0](request, server, function(status, body, headers){ + handlers[0](request, server, function(status, body){ if(status === null || status === undefined){ handler_chain(handlers.slice(1), request, server, response, not_found); } else{ - response.writeHead(status, headers); + response.writeHead(status, request.response_headers); response.end(body); } }); @@ -18,6 +18,14 @@ var handler_chain = function(handlers, request, server, response, not_found){ } }; +var setup_request = function(request, server){ + request.response_headers = []; + request.addHeader = function(name, value){ + request.response_headers.push([name, value]); + }; + return request; +}; + var server = function(settings, http_server){ this.settings = settings || {}; this.bind = this.settings.bind || "0.0.0.0:8000"; @@ -36,6 +44,7 @@ var server = function(settings, http_server){ }; server.prototype.rootHandler = function(request, response){ + request = setup_request(request); var self = this.yaps; var handlers = []; var method = request.method.toUpperCase(); @@ -54,13 +63,13 @@ server.prototype.rootHandler = function(request, response){ if(handlers.length){ handler_chain(handlers, request, self, response, function(){ handler_chain(self.notFound, request, self, response, function(){ - response.writeHead(404); + response.writeHead(404, request.response_headers); response.end("Not Found"); }); }); } else{ handler_chain(self.notFound, request, self, response, function(){ - response.writeHead(404); + response.writeHead(404, request.response_headers); response.end("Not Found"); }); } diff --git a/test/server.rootHandler.js b/test/server.rootHandler.js index b5d6ba7..59ba1ee 100644 --- a/test/server.rootHandler.js +++ b/test/server.rootHandler.js @@ -91,7 +91,8 @@ suite("Server.RootHandler", function(){ test("should properly end response when handler responds", function(done){ var handler = function(request, server, respond){ - respond(200, "here is a test", {extra: "header"}); + request.addHeader("extra", "header"); + respond(200, "here is a test"); }; var handler_spy = sinon.spy(handler); @@ -106,7 +107,7 @@ suite("Server.RootHandler", function(){ assert.ok(this.writeHead.calledOnce); assert.ok(this.end.calledOnce); - assert.ok(this.writeHead.calledWith(200, {extra: "header"})); + assert.ok(this.writeHead.calledWith(200, [["extra", "header"]])); assert.ok(this.end.calledWith("here is a test")); done(); });