broadway
Lightweight App extensibility and hookable middleware customization.
Usage
broadway
is designed to be the littlest possible extensibility for server applications. It is does not take any other external dependencies besides those to expose basic "start middleware".
Additional functionality may be added through .mixin(base, redefine)
:
var express = require('express'),
App = require('broadway');
var app = new App({ http: 8080 });
app.mixin(express());
app.preboot(function (app, options, next) {
console.log('Starting up...');
next();
});
app.start(function (err) {
if (err) {
console.error('Error on startup: %s', err.message);
return process.exit(1);
}
console.log('Listening over HTTP on port %s', this.given.http);
});
"Hookable" middleware
Because broadway
exposes a generic hook mechanism from understudy it is possible to write hooks into your middleware easily. Consider the following example that defines hookable "auth" handlers into its existing authorization middleware:
var express = require('express'),
basicAuth = require('basic-auth'),
App = require('broadway');
var app = new App({ http: 8080 }, express());
app.use(function auth(req, res, next) {
app.perform('auth', req, res, function (done) {
var creds = basicAuth(req);
if (req.authed) {
return done();
}
else if (!creds || creds.name !== 'bob' || creds.pass !== 'secret') {
res.writeHead(401, { 'WWW-Authenticate': 'Basic realm="example"' });
res.end('Unauthorized\n');
return;
}
done();
}, next);
});
app.before('auth', function (req, res, next) {
var bearerToken = req.headers['x-auth-token'];
if (bearerToken === 'golden-ticket') {
req.authed = true;
}
next();
});
Tests
All tests are written with mocha and should be run with npm
:
$ npm test
License: MIT