From 8f81c810e074f4c78c99eb975880a0ba0309a398 Mon Sep 17 00:00:00 2001 From: Esther Lozano Date: Tue, 25 Feb 2020 14:14:20 +0100 Subject: [PATCH] Continue middleware chain after response or error --- lib/api/middlewares/error-middleware.js | 2 ++ lib/api/middlewares/send-response.js | 9 ++++-- test/unit/error-middleware-test.js | 42 ++++++++++++++++--------- 3 files changed, 35 insertions(+), 18 deletions(-) diff --git a/lib/api/middlewares/error-middleware.js b/lib/api/middlewares/error-middleware.js index cd649c90..313ebea8 100644 --- a/lib/api/middlewares/error-middleware.js +++ b/lib/api/middlewares/error-middleware.js @@ -37,6 +37,8 @@ module.exports = function errorMiddleware (/* options */) { } else { res.json(errorResponseBody); } + + next(); }; }; diff --git a/lib/api/middlewares/send-response.js b/lib/api/middlewares/send-response.js index 3e858aff..f37457d6 100644 --- a/lib/api/middlewares/send-response.js +++ b/lib/api/middlewares/send-response.js @@ -1,19 +1,22 @@ 'use strict'; module.exports = function sendResponse () { - return function sendResponseMiddleware (req, res) { + return function sendResponseMiddleware (req, res, next) { req.profiler.done('res'); res.status(res.statusCode); if (Buffer.isBuffer(res.body)) { - return res.send(res.body); + res.send(res.body); + return next(); } if (req.query.callback) { - return res.jsonp(res.body); + res.jsonp(res.body); + return next(); } res.json(res.body); + return next(); }; }; diff --git a/test/unit/error-middleware-test.js b/test/unit/error-middleware-test.js index 0dc07b72..b973d49a 100644 --- a/test/unit/error-middleware-test.js +++ b/test/unit/error-middleware-test.js @@ -62,13 +62,17 @@ describe('error-middleware', function () { }; const errorFn = errorMiddleware(); - errorFn(errors, req, res); + errorFn(errors, req, res, (err) => { + if (err) { + return done(err); + } - assert.deepStrictEqual(res.headers, { - 'X-Tiler-Errors': JSON.stringify(errorHeader) + assert.deepStrictEqual(res.headers, { + 'X-Tiler-Errors': JSON.stringify(errorHeader) + }); + + return done(); }); - - done(); }); it('JSONP should return a header with error status code', function (done) { @@ -114,13 +118,17 @@ describe('error-middleware', function () { }; const errorFn = errorMiddleware(); - errorFn(errors, req, res); + errorFn(errors, req, res, (err) => { + if (err) { + return done(err); + } - assert.deepStrictEqual(res.headers, { - 'X-Tiler-Errors': JSON.stringify(errorHeader) + assert.deepStrictEqual(res.headers, { + 'X-Tiler-Errors': JSON.stringify(errorHeader) + }); + + return done(); }); - - done(); }); it('should escape chars that broke logs regex', function (done) { @@ -167,12 +175,16 @@ describe('error-middleware', function () { }; const errorFn = errorMiddleware(); - errorFn(errors, req, res); + errorFn(errors, req, res, (err) => { + if (err) { + return done(err); + } - assert.deepStrictEqual(res.headers, { - 'X-Tiler-Errors': JSON.stringify(errorHeader) + assert.deepStrictEqual(res.headers, { + 'X-Tiler-Errors': JSON.stringify(errorHeader) + }); + + return done(); }); - - done(); }); });