new MiddlewareManager()
Example
## Basic We define a Person class. // the target object class Person { // the target function walk(step) { this.step = step; } speak(word) { this.word = word; } } Then we define a middleware function to print log. // middleware for walk function const logger = target => next => (...args) => { console.log(`walk start, steps: ${args[0]}.`); const result = next(...args); console.log(`walk end.`); return result; } Now we apply the log function as a middleware to a Person instance. // apply middleware to target object const p = new Person(); const middlewareManager = new MiddlewareManager(p); middlewareManager.use('walk', logger); p.walk(3); Whenever a Person instance call it's walk method, we'll see logs from the looger middleware. ## Middleware object We can also apply a middleware object to a target object. Middleware object is an object that contains function's name as same as the target object's function name. const PersonMiddleware = { walk: target => next => step => { console.log(`walk start, steps: step.`); const result = next(step); console.log(`walk end.`); return result; }, speak: target => next => word => { word = 'this is a middleware trying to say: ' + word; return next(word); } } // apply middleware to target object const p = new Person(); const middlewareManager = new MiddlewareManager(p); middlewareManager.use(PersonMiddleware); p.walk(3); p.speak('hi'); ## middlewareMethods In a class, function's name start or end with "_" will not be able to apply as middleware. Or we can use `middlewareMethods` to define function names for middleware target within a class. class PersonMiddleware { constructor() { // Or Define function names for middleware target. this.middlewareMethods = ['walk', 'speak']; } // Function's name start or end with "_" will not be able to apply as middleware. _getPrefix() { return 'Middleware log: '; } log(text) { console.log(this._getPrefix() + text); } walk(target) { return next => step => { this.log(`walk start, steps: step.`); const result = next(step); this.log(`walk end.`); return result; } } speak(target) { return next => word => { this.log('this is a middleware trying to say: ' + word); return next(word); } } } // apply middleware to target object const p = new Person(); const middlewareManager = new MiddlewareManager(p); middlewareManager.use(new PersonMiddleware()) p.walk(3); p.speak('hi');
Methods
-
use(methodName, middlewares)
-
Apply (register) middleware functions to the target function or apply (register) middleware objects. If the first argument is a middleware object, the rest arguments must be middleware objects.
Parameters:
Name Type Argument Description methodName
string | object String for target function name, object for a middleware object.
middlewares
function | object <repeatable>
The middleware chain to be applied.
Returns:
this
- Type
- object