packages/express/lib/express_mw.js (42 lines of code) (raw):

const AWSXRay = require('aws-xray-sdk-core'); const mwUtils = AWSXRay.middleware; /** * Express middleware module. * * Exposes Express middleware functions to enable automated data capturing on a web service. To enable on a Node.js/Express application, * use 'app.use(AWSXRayExpress.openSegment())' before defining your routes. After your routes, before any extra error * handling middleware, use 'app.use(AWSXRayExpress.closeSegment())'. * Use AWSXRay.getSegment() to access the current sub/segment. * Otherwise, for manual mode, this appends the Segment object to the request object as req.segment. * @module express_mw */ const expressMW = { /** * Use 'app.use(AWSXRayExpress.openSegment('defaultName'))' before defining your routes. * Use AWSXRay.getSegment() to access the current sub/segment. * Otherwise, for manual mode, this appends the Segment object to the request object as req.segment. * @param {string} defaultName - The default name for the segment. * @alias module:express_mw.openSegment * @returns {function} */ openSegment: (defaultName) => { if (!defaultName || typeof defaultName !== 'string') { throw new Error('Default segment name was not supplied. Please provide a string.'); } mwUtils.setDefaultName(defaultName); return (req, res, next) => { const segment = mwUtils.traceRequestResponseCycle(req, res); if (AWSXRay.isAutomaticMode()) { const ns = AWSXRay.getNamespace(); ns.bindEmitter(req); ns.bindEmitter(res); ns.run(() => { AWSXRay.setSegment(segment); if (next) { next(); } }); } else { req.segment = segment; if (next) { next(); } } }; }, /** * After your routes, before any extra error handling middleware, use 'app.use(AWSXRayExpress.closeSegment())'. * This is error-handling middleware, so it is called only when there is a server-side fault. * @alias module:express_mw.closeSegment * @returns {function} */ closeSegment: () => { return (err, req, res, next) => { const segment = AWSXRay.resolveSegment(req.segment); if (segment && err) { segment.addError(err); AWSXRay.getLogger().debug('Added Express server fault to segment'); } if (next) { next(err); } }; } }; module.exports = expressMW;