From 4ffa8c0e8ee5eaac7c53d97f40f3a118dc8de4f8 Mon Sep 17 00:00:00 2001 From: Matthijs van Henten Date: Thu, 21 May 2015 23:42:00 +0000 Subject: [PATCH] adds a global handler to frontdoor: allow injection of global middlewares --- node_modules/frontdoor/lib/section.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/node_modules/frontdoor/lib/section.js b/node_modules/frontdoor/lib/section.js index 9d482dcc..03bb6f17 100644 --- a/node_modules/frontdoor/lib/section.js +++ b/node_modules/frontdoor/lib/section.js @@ -15,6 +15,7 @@ module.exports = function Section(name, description, types) { var self = this; this.middlewares = []; + this.globals = []; this.errorHandlers = []; this.name = name; @@ -45,10 +46,22 @@ module.exports = function Section(name, description, types) { }); }; + /** + * Insert global middleware(s) for this section: The parent section is + * always an empty container that delegates to it's sub-sections, and + * executes all the middelwares for that section. + * + * This method allows us to inject a "global" middleware that is inserted + * *after* decodeParams and *before* all other middelwares. + */ + this.global = function( middleware ){ + this.globals.push.apply(this.globals, flatten(middleware)); + }; + this.use = function(middleware) { this.middlewares.push.apply(this.middlewares, flatten(middleware)); }; - + this.error = function(middleware) { this.errorHandlers.push.apply(this.errorHandlers, flatten(middleware)); }; @@ -112,7 +125,7 @@ module.exports = function Section(name, description, types) { var method = req.method.toLowerCase(); if (methods.indexOf(method) == -1) return next(); - + var handler = this.match(req, path, method); if (!handler) return next(); @@ -125,6 +138,9 @@ module.exports = function Section(name, description, types) { handler = handler.parent; } + if (this.globals.length) + middleware.splice.apply( middleware, [1, 0].concat( this.globals ) ); + var i = 0; function processNext() { handler = middleware[i++];