executor: pass correct `this` to middleware
Fix the bug "can't configure passport#initialize in middleware.json"
This commit is contained in:
parent
215abf9d30
commit
6424534831
|
@ -280,7 +280,7 @@ function setupMiddleware(app, instructions) {
|
|||
data.fragment ? ('#' + data.fragment) : '');
|
||||
var factory = require(data.sourceFile);
|
||||
if (data.fragment) {
|
||||
factory = factory[data.fragment];
|
||||
factory = factory[data.fragment].bind(factory);
|
||||
}
|
||||
assert(typeof factory === 'function',
|
||||
'Middleware factory must be a function');
|
||||
|
|
|
@ -467,6 +467,29 @@ describe('executor', function() {
|
|||
|
||||
expect(app.componentOptions).to.eql({ option: 'value' });
|
||||
});
|
||||
|
||||
it('configures middleware (that requires `this`)', function(done) {
|
||||
var passportPath = require.resolve('./fixtures/passport');
|
||||
|
||||
boot.execute(app, someInstructions({
|
||||
middleware: {
|
||||
phases: ['auth'],
|
||||
middleware: [
|
||||
{
|
||||
sourceFile: passportPath,
|
||||
fragment: 'initialize',
|
||||
config: {
|
||||
phase: 'auth:before'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}));
|
||||
|
||||
supertest(app)
|
||||
.get('/')
|
||||
.expect('passport', 'initialized', done);
|
||||
});
|
||||
});
|
||||
|
||||
function assertValidDataSource(dataSource) {
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
var framework = {
|
||||
initialize: function(passport) {
|
||||
return function(req, res, next) {
|
||||
req._passport = passport;
|
||||
res.setHeader('passport', 'initialized');
|
||||
next();
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
var Passport = function() {
|
||||
this._framework = framework;
|
||||
};
|
||||
|
||||
Passport.prototype.initialize = function() {
|
||||
return this._framework.initialize(this);
|
||||
};
|
||||
|
||||
module.exports = new Passport();
|
Loading…
Reference in New Issue