[]; sequence.add(before); sequence.add(controller); sequence.add(after); var func = function(req, resp, callback) { var funcIdx = 0; var funcCount = sequence.length; app.logger.info("Received a request \"{router}.{action}\".".assign({ router : routerName, action : keyName })); // do the sequence async.whilst( function() { return funcIdx < funcCount; }, function(next) { var func = sequence[funcIdx]; func(req, resp, function() { funcIdx++; next(); }); }, function(err) { if(err) { app.logger.err("An error occurred in `{router}` -> `{action}`: {error}".assign({ router : routerName, action : keyName, error : err.message })); return; } callback(); } ); }; return func; }