NestJS consul config Module
More NestJS libs on alariblog.ru Updated for NestJS 9
NestJS consul package allows you to load configs from consul and work with key/values.
npm i nestjs-consul
Then register module in your root app.module
import { ConsulModule } from 'nestjs-consul';
@Module({
imports: [
// ...
ConsulModule.forRoot <
YourConfig >
{
keys: [{ key: 'your/keypath' }],
updateCron: '* * * * *',
connection: {
protocol: 'http',
port: 8500,
host: '192.168.0.1',
token: 'mutoken',
},
},
],
})
export class AppModule {}
If you want to inject dependency into forRoot
method like Configuration service, use forRootAsync
:
import { ConsulModule } from 'nestjs-consul';
@Module({
imports: [
// ...
ConfigModule,
ConsulModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => {
return {
keys: [{ key: 'am-cli/test' }],
connection: {
protocol: 'http',
port: configService.getIP(),
host: '192.168.0.1',
token: 'admin',
},
};
},
}),
],
})
export class AppModule {}
- keys (IConsulKeys[]?) - array of keys and required status from which you want to load values. If key was not found and it was required, app with throw an exception. If it was not required - you will see warning. If no keys specified, no initial configs will be loaded.
- updateCron (string) - cron string. If specified, will update configs on cron.
- protocol ('http' | 'https') - consul protocol.
- protocol ('http' | 'https') - consul protocol.
- port (number) - consul port.
- host (string) - consul host.
- token (string) - consul auth token.
- YourConfig (interface) - interface, that describes you entire config. This will allow you to use type save configs. In this example it would be like:
export interface YourConfig {
'your/keypath': {
value1: number,
value2: string,
};
}
Then you can use your configs with public property configs
of ConsuleService
.
import { ConsuleService } from 'nestjs-consul';
constructor(
private readonly consul: ConsuleService
) {}
myMethod() {
const configs = this.consul.configs;
}
Additional methods
update()
Returns Promise<void>
. Force updates your config.
await this.consul.update();
get(key: string)
Returns Promise<T>
. Gets a value from consul with key
and T
type.
const value = (await this.consul.get) < MyInterface > 'my/key';
set(key: string, value: T)
Returns Promise<boolean>
. Sets a value to consul with key
and T
type. Returns true
if succeeded.
const response = (await this.consul.set) < MyInterface > ('my/key', value);
delete(key: string)
Returns Promise<boolean>
. Deletes a value from consul with key
. Returns true
if succeeded.
const response = await this.consul.delete('my/key');
Running tests
To run e2e tests you need to have consul instance started and run test for the firs time (to add config key).
Then run tests with.
npm run test