adds a global handler to frontdoor: allow injection of global middlewares

pull/43/merge
Matthijs van Henten 2015-05-21 23:42:00 +00:00
rodzic 5bd78f5ecc
commit 4ffa8c0e8e
1 zmienionych plików z 18 dodań i 2 usunięć

20
node_modules/frontdoor/lib/section.js wygenerowano vendored
Wyświetl plik

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