When debugging an issue in your applications logs, it helps to be able to follow a specific request up and down your whole stack. This is usually done by including a correlation-id
(aka Request-id
) header in all your requests, and forwarding the same id across all your microservices.
yarn add @evanion/nestjs-correlation-id
npm install @evanion/nestjs-correlation-id
Add the middleware to your AppModule
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import {
CorrelationIdMiddleware,
CorrelationModule,
} from '@evanion/nestjs-correlation-id';
@Module({
imports: [CorrelationModule.forRoot()],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(CorrelationIdMiddleware).forRoutes('*');
}
}
And then just inject the correlation middleware in your HttpService by calling the registerAsync
method with the withCorrelation
function.
import { HttpModule } from '@nestjs/axios';
import { withCorrelation } from '@evanion/nestjs-correlation-id';
@Module({
imports: [HttpModule.registerAsync(withCorrelation())],
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
You can now use the HttpService
as usual in your UsersService
and UsersController
You can easily customize the header and ID by including a config when you register the module
@Module({
imports: [CorrelationModule.forRoot({
header: string
generator: () => string
})]
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(CorrelationIdMiddleware).forRoutes('*');
}
}
see e2e tests for a fully working example
See Changelog for more information.
Contributions welcome! See Contributing.
Mikael Pettersson (Evanion on Discord)
Licensed under the MIT License - see the LICENSE file for details.