wzp
2021-05-13 7d694a9113118daec5be7ac224dab46a3b20f106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'use strict';
 
var assert = require('assert-plus');
 
var DEFAULT_HEADERS = ['request-id', 'x-request-id'];
 
/**
 * This plugin pulls the value from an incoming request header and uses it
 * as the value of the request id. Subsequent calls to `req.id()`
 * will return the header values.
 *
 * @public
 * @function reqIdHeaders
 * @param {Object}   opts - an options object
 * @param {String[]} opts.headers - array of headers from where to pull existing
 *                                request id headers. Lookup precedence
 *                                is left to right (lowest index first)
 * @returns {Function} Handler
 */
function createReqIdHeaders(opts) {
    assert.object(opts, 'opts');
    assert.arrayOfString(opts.headers, 'opts.headers');
 
    var headers = opts.headers.concat(DEFAULT_HEADERS);
 
    return function reqIdHeaders(req, res, next) {
        for (var i = 0; i < headers.length; i++) {
            var val = req.header(headers[i]);
 
            if (val) {
                req.id(val);
                break;
            }
        }
 
        return next();
    };
}
 
///--- Exports
 
module.exports = createReqIdHeaders;