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

3.0.1 • Public • Published

Nest Logo

Description

A component of nestcloud. NestCloud is a nest framework micro-service solution.

中文文档

This is a Nest module to get configurations from consul kv.

Installation

$ npm i --save nest-consul consul nest-consul-config

Quick Start

Import Module

import { Module } from '@nestjs/common';
import { ConsulModule } from 'nest-consul';
import { ConsulConfigModule } from 'nest-consul-config';
 
const env = process.env.NODE_ENV;
 
@Module({
  imports: [
      ConsulModule.register({
        host: '127.0.0.1',
        port: 8500
      }),
      ConsulConfigModule.register({key: `config__user-service__${env}`})
  ],
})
export class ApplicationModule {}

If you use nest-boot module.

import { Module } from '@nestjs/common';
import { ConsulModule } from 'nest-consul';
import { ConsulConfigModule } from 'nest-consul-config';
import { BootModule } from 'nest-boot';
import { NEST_BOOT } from 'nest-common';
 
@Module({
  imports: [
      ConsulModule.register({dependencies: [NEST_BOOT]}),
      BootModule.register(__dirname, 'bootstrap.yml'),
      ConsulConfigModule.register({dependencies: [NEST_BOOT]})
  ],
})
export class ApplicationModule {}
Nest-boot config file
web:
  serviceId:
  serviceName: user-service
consul:
  host: localhost
  port: 8500
  config:
    # available expressions: {serviceName} {serviceId} {env} 
    key: config__{serviceName}__{env}
    retry: 5

Config Client Injection

In consul kv, the key is "config__user-service__development".

user:
  info:
    name: 'test'
import { Injectable } from '@nestjs/common';
import { InjectConfig, ConsulConfig } from 'nest-consul-config';
 
@Injectable()
export class TestService {
  constructor(
      @InjectConfig() private readonly config: ConsulConfig
  ) {}
 
  getUserInfo() {
      const userInfo = this.config.get('user.info', {name: 'judi'});
      console.log(userInfo);
  }
}

Dynamic config update:

import { Injectable } from '@nestjs/common';
import { InjectConfig, ConsulConfig, DynamicConfig, ConfigValue, OnUpdate } from 'nest-consul-config';
 
@Injectable()
export class TestService extends DynamicConfig implements OnUpdate {
  @ConfigValue('user.info', {name: 'judi'})
  private readonly userInfo;
  
  constructor(
      @InjectConfig() private readonly config: ConsulConfig
  ) {
      super(config);
  }
  
  onUpdate() {
      // Some service need re-initial after the config updated, you can execute it here.
  }
 
  getUserInfo() {
      return this.userInfo;
  }
}

API

class ConsulConfigModule

static register(options): DynamicModule

Import nest consul config module.

field type description
options.dependencies string[] if you are using nest-boot module, please set [NEST_BOOT]
options.key string the key of consul kv
options.retry number the max retry count when get configuration fail

class ConsulConfig

get(path?: string, defaults?: any): any

Get configuration from consul kv.

field type description
path string the path of the configuration
defaults any default value if the specific configuration is not exist

getKey(): string

Get the current key.

onChange(callback: (configs) => void): void

watch the configurations.

field type description
callback (configs) => void callback function

async set(path: string, value: any): void

update configuration.

field type description
path string the path of the configuration
value any the configuration

Stay in touch

License

NestCloud is MIT licensed.

Readme

Keywords

none

Package Sidebar

Install

npm i nest-consul-config

Weekly Downloads

39

Version

3.0.1

License

MIT

Unpacked Size

68.4 kB

Total Files

29

Last publish

Collaborators

  • zfeng