1.5.1 • Published 1 year ago

nestjs-consul v1.5.1

Weekly downloads
13
License
MIT
Repository
github
Last release
1 year ago

NestJS consul config Module

alt cover

More NestJS libs on alariblog.ru Updated for NestJS 9

npm version npm version npm version npm version

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

alt cover

1.5.1

1 year ago

1.5.0

2 years ago

1.4.0

2 years ago

1.3.1

2 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago