From 228bc7519b1ef06124d2b4d2dc4e2d28700c9ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Bajto=C5=A1?= Date: Mon, 15 Oct 2018 13:30:20 +0200 Subject: [PATCH] Fix context propagation broken by async@2.x Rework the REST middleware to use a hand-written version of "async.eachSeries". Before this change, we were loosing CLS context when the application was relying on the REST middleware to load the context middleware. This is fixing a problem introduced by post-1.0 versions of async, which we upgraded to via fea3b781a. --- server/middleware/rest.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/server/middleware/rest.js b/server/middleware/rest.js index 2ec5a200d..f1eb3ecec 100644 --- a/server/middleware/rest.js +++ b/server/middleware/rest.js @@ -73,8 +73,21 @@ function rest() { if (handlers.length === 1) { return handlers[0](req, res, next); } - async.eachSeries(handlers, function(handler, done) { - handler(req, res, done); - }, next); + + executeHandlers(handlers, req, res, next); }; } + +// A trimmed-down version of async.series that preserves current CLS context +function executeHandlers(handlers, req, res, cb) { + var ix = -1; + next(); + + function next(err) { + if (err || ++ix >= handlers.length) { + cb(err); + } else { + handlers[ix](req, res, next); + } + } +}