co-middleware
v0.3.0
Published
Middleware registering/running methods based using co
Downloads
3
Maintainers
Readme
co-middleware
co-powered middleware mixin for objects
Installation
npm install co-middleware
API
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) // 4
Middleware 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
name
is provided, all middleware will be removed. - If no
middleware
is provided, all middleware for givenname
will be removed. - If
name
andmiddleware
provided, removesmiddleware
fromname
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.