expressify-middleware
Version:
The Modern (ES6) and Express-Style Middleware Composition
26 lines (19 loc) • 572 B
JavaScript
module.exports = class Middleware extends Array {
next (req, res, last, i = 0, done = false, called = false, fn = undefined) {
if ((done = i > this.length)) return
fn = this[i] || last
return fn && fn(req, res, () => {
if (called) throw new Error('next() called multiple times')
called = true
return Promise.resolve(this.next(req, res, last, i + 1))
})
}
compose (req, res, last) {
try {
return Promise.resolve(this.next(req, res, last))
} catch (err) {
return Promise.reject(err)
}
}
}