express-lifecycle v0.1.1
Express Lifecycle
Attempt at having a before, main and after phase.
Goals
- Ensure requests are processed by middleware in sequence irrespective of when they are added.
- Ensure that
after
is processed before a request ends to perform cleanup/maintenance tasks.
Adds 'before', 'main' and 'after' lifecycle phases which are basically multiple instances of Express Routers. All the express router bind methods get, route, use, etc. work on the phase objects.
Usage
var app = express();
var lifecycle = require('express-lifecycle').init(app);
lifecycle.before.use(function(req, res, next) {
// Before everything
});
lifecycle.main.use(function(req, res, next) {
// Main Stuff
});
lifecycle.after.use(function(req, res, next) {
// After everything
});
Lifecycle Namespace
var app = express();
require('express-lifecycle').init(app);
app.lifecycle.before.use(...)
app.lifecycle.main.use(...)
app.lifecycle.after.use(...)
The namespace can be customized
var app = express();
require('express-lifecycle').init(app, {
ns: 'xyz'
});
app.xyz.before.use(...);
app.xyz.main.use(...);
app.xyz.after.use(...);
'.' namespace
var app = express();
require('express-lifecycle').init(app, {
ns: '.' // . has a special meaning
});
app.before.use(...);
app.main.use(...)
app.after.use(...);
Direct Usage
Bypassing the helper init method, standalone lifecycle instances can be created standalone shared between apps.
var Lifecycle = require('express-lifecycle`);
var lifecycle = new Lifecycle();
lifecycle.middleware(app);
lifecycle.before.use(...)
lifecycle.main.use(...)
lifecycle.after.use(...)
lifecycle.extend(app);
app.lifecycle.before.use(...)
app.lifecycle.main.use(...)
app.lifecycle.after.use(...)
Stability
Still testing out how it works with edge cases, errors, etc.
History
Is this achievable? seemed impossible, then difficult, in the end resorted back to overriding res.end
- the one thing I didn't want to do.
And somehow survived not being able to access next
in end
and it works now.
The idea of overriding res.end is from express-session
and thats seems to be the only way to do it as res.redirect(), res.end() bypass the remaining middleware.