co-middleware
v0.3.0
Published
Middleware registering/running methods based using co
Maintainers
Readme
co-middleware
co-powered middleware mixin for objects

Installation
npm install co-middlewareAPI
Middleware(obj)
The Middleware may be used as a mixin or a standalone object.
Standalone:
var Middleware = require('co-middleware');
var middleware = new Middleware();
middleware.middleware('say', function *(message) {
yield delay(200);
console.log("I say: " + message);
return true;
});
co(function *() {
var result = yield middleware.run('say', 'hello')
});
// result == true, and console.logs "I say: hello""Mixin:
var user = { name: 'Tobi' };
Middleware(user);
user.run('some middleware');Prototype mixin:
var User = function() {
this.name = 'Tobi';
};
Middleware(User.prototype);
var user = new User();
user.run('some middleware');Middleware#middleware(name, fn*, [...moreFns*])
Registers generator as a middleware for name.
fn* can be:
- a generator function
- an array of multiple generator functions (will be run in the order passed in)
var middleware = new Middleware();
var middlewareA = function *() {},
middlewareB = function *() {},
middlewareC = function *() {};
// All of these would be equal
middleware.middleware(middlewareA);
middleware.middleware(middlewareB);
middleware.middleware(middlewareC);
// or
middleware.middleware([middlewareA, middlewareB, middlewareC]);
// or
middleware.middleware(middlewareA, middlewareB, middlewareC);Middleware#run(name, ...args)
Runs the registered middlewares for name. Passes in optional args to the middlewares.
args can be an array, or multiple arguments.
Returns a thunk.
var result = yield middleware.run('add', 2, 2);
console.log(result) // 4Middleware chaining
As is implied by the middleware pattern, results from one middleware can be piped into the next. For example:
var middleware = new Middleware();
var uppercase = function *(str) {
return str.toUpperCase();
};
var firstChar = function *(str) {
return str.charAt(0)
};
middleware.middleware('upperFirst', uppercase, firstChar);
var result = yield middleware.run('upperFirst', 'hello world');
// result == 'H'If you do not return a value, it will use the initial arguments passed in.
Middleware#removeMiddleware([name], [middleware])
Removes a given middleware for a specific name.
- If no
nameis provided, all middleware will be removed. - If no
middlewareis provided, all middleware for givennamewill be removed. - If
nameandmiddlewareprovided, removesmiddlewarefromname
Middleware#hasMiddlewares(name)
Returns whether or not any middleware exist for name.
Middleware#middlewares(name)
Returns an array of all middleware for a given name. If no middlewares exist, returns an empty array.
