diff --git a/History.md b/History.md index 30f3d76988..a14ddff207 100644 --- a/History.md +++ b/History.md @@ -2,6 +2,7 @@ === * deps: Remove setprototypeof + * no longer need to call the restore method to restore `req.params` after invoking router 5.x === diff --git a/lib/application.js b/lib/application.js index fd4dcf19fc..148e1fd53b 100644 --- a/lib/application.js +++ b/lib/application.js @@ -197,22 +197,7 @@ class ExpressApp extends EventEmitter { #mergeMethodsFromTargetToSource(source, target) { Object.keys(source).forEach(key => target[key] = source[key].bind(target)) } - #mergeRequestAndResponse (req, res, fn) { - if (req.originalUrl === req.baseUrl) { - this.#mergeMethodsFromTargetToSource(fn.request, req) - this.#mergeMethodsFromTargetToSource(fn.response, res) - } else { - this.#mergeMethodsFromTargetToSource(this.request, req) - this.#mergeMethodsFromTargetToSource(this.response, res) - } - } - #wrapper (fn) { - return (req, res, next) => { - this.#mergeMethodsFromTargetToSource(this.request, req) - this.#mergeMethodsFromTargetToSource(this.response, res) - fn(req, res, next) - } - } + /** * Proxy `Router#use()` to add middleware to the app router. * See Router#use() documentation for details. diff --git a/lib/router.js b/lib/router.js index 2065d05681..2b929f6f67 100644 --- a/lib/router.js +++ b/lib/router.js @@ -162,7 +162,7 @@ Router.prototype.handle = function handle (req, res, callback) { // manage inter-router variables var parentParams = req.params var parentUrl = req.baseUrl || '' - var done = restore(callback, req, 'baseUrl', 'next', 'params') + var done = callback // setup next layer req.next = next @@ -635,31 +635,6 @@ function processParams (params, layer, called, req, res, done) { param() } -/** - * Restore obj props after function - * - * @private - */ - -function restore (fn, obj) { - var props = new Array(arguments.length - 2) - var vals = new Array(arguments.length - 2) - - for (var i = 0; i < props.length; i++) { - props[i] = arguments[i + 2] - vals[i] = obj[props[i]] - } - - return function () { - // restore vals - for (var i = 0; i < props.length; i++) { - obj[props[i]] = vals[i] - } - - return fn.apply(this, arguments) - } -} - /** * Send an OPTIONS response. * diff --git a/test/AppRouter.mjs b/test/AppRouter.mjs index dc86d76191..d7bb12c1b2 100644 --- a/test/AppRouter.mjs +++ b/test/AppRouter.mjs @@ -13,6 +13,7 @@ describe('app.router', () => { it('should restore req.params after leaving router', (t, done) => { const app = express() const router = new express.Router() + const server = app.listen() function handler1(req, res, next){ res.setHeader('x-user-id', String(req.params.id)) @@ -30,11 +31,11 @@ describe('app.router', () => { app.get('/user/:id', handler1, router, handler2) - request(app) + request(server) .get('/user/1') .expect('x-router', 'undefined') .expect('x-user-id', '1') - .expect(200, '1', done) + .expect(200, '1', () => server.close(done)) }) describe('methods', () => { @@ -382,6 +383,7 @@ describe('app.router', () => { it('should restore req.params', (t, done) => { const app = express() + const server = app.listen() const router = new express.Router({ mergeParams: true }) router.get('/user-(\\w+)/(.*)', (req, res, next) => { @@ -395,9 +397,9 @@ describe('app.router', () => { }) }) - request(app) + request(server) .get('/user/id-42/user-tj/profile') - .expect(200, '[["0","42"]]', done) + .expect(200, '[["0","42"]]', () => server.close(done)) }) })