Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 97857ab

Browse files
committed
fix(middleware): Fix middleware layer to execute middleware in reverse after controller call
According to #134 middleware are called in reverse without waiting for the controller to be executed #134
1 parent d0e5303 commit 97857ab

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

src/Middleware/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,6 @@ Middleware.compose = function (middleware, request, response) {
204204
const values = [request, response, next].concat(middleware[i].parameters)
205205
next = method.apply(instance, values)
206206
}
207-
yield * next
207+
return yield * next
208208
}
209209
}

src/Server/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class Server {
4949
_respond (request, response, finalHandler) {
5050
try {
5151
const chain = helpers.makeMiddlewareChain(this.middleware, finalHandler, true)
52-
this._executeChain(chain, request, response)
52+
return this._executeChain(chain, request, response)
5353
} catch (e) {
5454
this._handleError(e, request, response)
5555
}
@@ -71,7 +71,7 @@ class Server {
7171
}
7272
const routeAction = this._makeRouteAction(resolvedRoute.handler)
7373
const chain = helpers.makeMiddlewareChain(this.middleware, routeAction, false, resolvedRoute)
74-
this._executeChain(chain, request, response)
74+
return this._executeChain(chain, request, response)
7575
}
7676

7777
/**
@@ -172,7 +172,7 @@ class Server {
172172
*/
173173
_executeChain (chain, request, response) {
174174
const middleware = this.middleware
175-
co(function * () {
175+
return co(function * () {
176176
yield middleware.compose(chain, request, response)
177177
}).catch((e) => {
178178
this._handleError(e, request, response)
@@ -239,7 +239,7 @@ class Server {
239239
request._params = resolvedRoute.params
240240

241241
const finalHandler = function * () {
242-
self._callRouteAction(resolvedRoute, request, response)
242+
yield self._callRouteAction(resolvedRoute, request, response)
243243
}
244244

245245
/**

test/acceptance/app.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,22 @@ describe('App Exceptations', function () {
9393
expect(browser.text('body').trim()).to.equal('1')
9494
})
9595

96+
it('should return the request elapsed when controller has set timeout', function * () {
97+
Middleware.global(['App/Http/Middleware/Logger'])
98+
const done = function () {
99+
return new Promise(function (resolve) {
100+
setTimeout(function () {
101+
resolve()
102+
}, 1000)
103+
})
104+
}
105+
Route.get('/', function * (request, response) {
106+
yield done(request)
107+
})
108+
yield browser.visit('/')
109+
expect(parseInt(browser.text('body').trim())).to.be.above(1000)
110+
})
111+
96112
it('should redirect request to a named route', function * () {
97113
Route.get('/', 'HomeController.redirect')
98114
Route.get('/:id', 'HomeController.profile').as('profile')
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
'use strict'
2+
3+
class Logger {
4+
5+
* handle (request, response, next) {
6+
const start = new Date().getTime()
7+
yield next;
8+
const elapsed = new Date().getTime() - start
9+
response.send(elapsed)
10+
}
11+
12+
}
13+
14+
module.exports = Logger

0 commit comments

Comments
 (0)