Browse Source

add addHeader function to http request object

master
Brett Langdon 12 years ago
parent
commit
37ef9bc8d3
3 changed files with 21 additions and 13 deletions
  1. +5
    -7
      examples/simple/my_plugin.js
  2. +13
    -4
      lib/server.js
  3. +3
    -2
      test/server.rootHandler.js

+ 5
- 7
examples/simple/my_plugin.js View File

@ -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;

+ 13
- 4
lib/server.js View File

@ -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");
});
}


+ 3
- 2
test/server.rootHandler.js View File

@ -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();
});


Loading…
Cancel
Save