Notwithstanding Precautions, Misadventure


    3.0.1-ci.19 • Public • Published

    Correlation Id

    How to use

    Create correlation id instance

    const {createCorrelationId} = require(`@vizydrop/correlation-id`);
    const correlationId = createCorrelationId();

    Integrate with @vizydrop/logger

    const {createLogger} = require(`@vizydrop/logger`);
    const logger = createLogger({
        correlationId: {
            enabled: true,
            getCorrelationId: () => correlationId.correlator.getId(),
            emptyValue: `nocorrelation`,

    Register middleware. Support koa and express

    // koa
    // express

    Enhance request so each request will contain correlation id http header.

    const request = require(`request`);
    const correlatedRequest = correlationId.enhanceRequest(request);

    Enhance http proxy so each proxied request will contain correlation id http header.

    const httpProxy = require(`http-proxy`);
    const proxy = httpProxy.createProxyServer({target: `http://anotherservice:10020/`});

    Run jobs. Jobs usually do not go through express/koa middleware so correlation id should be generated manually.

    function jobTask() {}
    function runJob() {
        correlationId.correlator.withId(correlator.generateDefaultId(), () => {


    Custom settings can be passed as an object to createCorrelationId function.

    • generateDefaultId - function that should return new correlation id. By default uuid is used.
    • namespaceName - namespace for cls hook. Default value is correlation-id-namespace
    • httpHeaderParamName - name of http header that contains correlation id value. Default value is x-correlationid

    Correlation ID API

    • expressMiddleware - express middleware that runs next middlewares in scope of correlation id async hook
    • koaMiddleware - koa middleware that runs next middlewares in scope of correlation id async hook
    • enhanceHttpRequest - takes request and return new request instance that adds correlation id header by default
    • enhanceHttpProxy - register additional listener that adds correlation id header by default
    • correlator.getId() - returns current correlation id
    • correlator.withId(id, fn) - run function and all subsequent function with specified correlation id
    • correlator.bindEmitter() - see
    • correlator.bind() - see
    • correlator.generateId() - generates new correlation id

    Known issues

    • does not work well with bluebird.promisifyAll. Alternative solution is to explicitly promisify using native promise
    const redis = require(`redis`);
    const util = require(`util`);
    const client = redis.createClient();
    client.setAsync = util.promisify(client.set).bind(client);
    client.getAsync = util.promisify(client.get).bind(client);
    • does not work well with mongoose callbacks. Alternative solution is to use promisified functions.
    const mongoose = require(`mongooose`);
    mongoose.Promise = global.Promise;
    EntityModel.find({name: `name`}).then((value) => {
        // do something


    npm i @vizydrop/correlation-id

    DownloadsWeekly Downloads






    Unpacked Size

    11.8 kB

    Total Files


    Last publish


    • avatar
    • avatar
    • avatar
    • avatar
    • avatar