4.0.2 • Published 2 years ago
@vizydrop/correlation-id v4.0.2
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
app.use(correlationId.koaMiddleware);
// express
app.use(correlationId.expressMiddleware);Enhance request so each request will contain correlation id http header.
const request = require(`request`);
const correlatedRequest = correlationId.enhanceRequest(request);
correlatedRequest.get(`http://anotherservice:10020/data`);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/`});
correlationId.enhanceHttpProxy(proxy);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(), () => {
        jobTask();
    });
}Settings
Custom settings can be passed as an object to createCorrelationId function.
generateDefaultId- function that should return new correlation id. By defaultuuidis used.namespaceName- namespace for cls hook. Default value iscorrelation-id-namespacehttpHeaderParamName- name of http header that contains correlation id value. Default value isx-correlationid
Correlation ID API
expressMiddleware- express middleware that runs next middlewares in scope of correlation id async hookkoaMiddleware- koa middleware that runs next middlewares in scope of correlation id async hookenhanceHttpRequest- takes request and return new request instance that adds correlation id header by defaultenhanceHttpProxy- register additional listener that adds correlation id header by defaultcorrelator.getId()- returns current correlation idcorrelator.withId(id, fn)- run function and all subsequent function with specified correlation idcorrelator.bindEmitter()- see https://github.com/jeff-lewis/cls-hooked#namespacebindemitteremittercorrelator.bind()- see https://github.com/jeff-lewis/cls-hooked#namespacebindemitteremittercorrelator.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 
mongoosecallbacks. Alternative solution is to use promisified functions. 
const mongoose = require(`mongooose`);
mongoose.Promise = global.Promise;
EntityModel.find({name: `name`}).then((value) => {
    // do something
});4.0.1
2 years ago
4.0.2
2 years ago
3.0.1-ci.21
3 years ago
3.0.1-ci.19
5 years ago
3.0.1-us352069-migrate-to-gitlab.21
5 years ago
3.0.1-us352069-migrate-to-gitlab.1
5 years ago
4.0.0
5 years ago
3.2.5
6 years ago
3.2.4
6 years ago
3.2.3
6 years ago
3.2.2
6 years ago
3.2.1
6 years ago
3.2.0
6 years ago
3.1.2
6 years ago
3.1.1
6 years ago
3.1.0
6 years ago
3.0.1
7 years ago
3.0.0
7 years ago
2.0.0
7 years ago