Nearsighted Prank Master

    nestjs-consul
    TypeScript icon, indicating that this package has built-in type declarations

    1.5.0 • Public • Published

    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

    Install

    npm i nestjs-consul

    DownloadsWeekly Downloads

    26

    Version

    1.5.0

    License

    MIT

    Unpacked Size

    26.6 kB

    Total Files

    32

    Last publish

    Collaborators

    • alaricode