Middleware example

by infous

JavaScript

var app = {
	showMessage: function (m) {
  	alert(m);
  }
};

function patchAppToAddErrors() {
  var next = app.showMessage;

  return function (m) {
    console.error('This is an error!');
    next(m);
    console.error('End error!');
  };
};

function patchAppToAddLogging() {
  var next = app.showMessage;

  return function (m) {
    console.log('Start message:', m);
    next(m);
    console.log('End message!');
  };
};

function applyMiddlewareByMonkeypatching(middlewares) {
	//middlewares = middlewares.slice();
  middlewares.reverse();
  
  middlewares.forEach(function (middleware) {
  	app.showMessage = middleware();
  })
}

applyMiddlewareByMonkeypatching([patchAppToAddLogging, patchAppToAddErrors]);

app.showMessage('Hello!');