diff --git a/plugins/node/opentelemetry-plugin-express/src/express.ts b/plugins/node/opentelemetry-plugin-express/src/express.ts index f837ac7f98..9c2bf32c8f 100644 --- a/plugins/node/opentelemetry-plugin-express/src/express.ts +++ b/plugins/node/opentelemetry-plugin-express/src/express.ts @@ -214,9 +214,9 @@ export class ExpressPlugin extends BasePlugin { if (callbackIdx >= 0) { arguments[callbackIdx] = function () { if (spanHasEnded === false) { - span.end(); spanHasEnded = true; req.res?.removeListener('finish', onResponseFinish); + span.end(); } if (!(req.route && arguments[0] instanceof Error)) { (req[_LAYERS_STORE_PROPERTY] as string[]).pop(); diff --git a/plugins/node/opentelemetry-plugin-express/test/express.test.ts b/plugins/node/opentelemetry-plugin-express/test/express.test.ts index 6f3a798ef6..a1004a7d55 100644 --- a/plugins/node/opentelemetry-plugin-express/test/express.test.ts +++ b/plugins/node/opentelemetry-plugin-express/test/express.test.ts @@ -91,9 +91,9 @@ describe('Express Plugin', () => { const router = express.Router(); app.use('/toto', router); router.get('/:id', (req, res) => { - setTimeout(() => { - return res.status(200).end(); - }, 5); + setImmediate(() => { + res.status(200).end(); + }); }); const server = http.createServer(app); await new Promise(resolve => server.listen(0, resolve));