Skip to content
This repository has been archived by the owner. It is now read-only.
[Migrated to nestcloud repository]A Nest framework (node.js) module for getting configurations from consul kv
TypeScript JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib bug fix Mar 19, 2019
.eslintrc.js
.gitignore
.npmignore initial commit May 14, 2018
.prettierrc initial commit May 14, 2018
README.md Update README.md Mar 7, 2019
index.d.ts initial commit May 14, 2018
index.js
index.ts.js initial commit May 14, 2018
package.json bug fix Mar 19, 2019
tsconfig.json migrate to nestcloud npm org Mar 5, 2019
tslint.json initial commit May 14, 2018
yarn.lock bug fix Mar 19, 2019

README.md

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 @nestcloud/consul consul @nestcloud/consul-config

Quick Start

Import Module

import { Module } from '@nestjs/common';
import { ConsulModule } from '@nestcloud/consul';
import { ConsulConfigModule } from '@nestcloud/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 dependency @nestcloud/boot module.

import { Module } from '@nestjs/common';
import { ConsulModule } from '@nestcloud/consul';
import { ConsulConfigModule } from '@nestcloud/consul-config';
import { BootModule } from '@nestcloud/boot';
import { NEST_BOOT } from '@nestcloud/common';

@Module({
  imports: [
      ConsulModule.register({dependencies: [NEST_BOOT]}),
      BootModule.register(__dirname, 'bootstrap.yml'),
      ConsulConfigModule.register({dependencies: [NEST_BOOT]})
  ],
})
export class ApplicationModule {}

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

How to get configurations

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

user:
  info:
    name: 'test'

Inject Config Client

import { Injectable } from '@nestjs/common';
import { InjectConfig, ConsulConfig } from '@nestcloud/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);
  }
}

Inject value

import { Injectable } from '@nestjs/common';
import { Configuration, ConfigValue } from '@nestcloud/consul-config';

@Injectable()
@Configuration()
export class TestService {
  @ConfigValue('user.info', {name: 'judi'})
  private readonly userInfo;

  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 @nestcloud/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

Decorators

Configuration(): ClassDecorator

ConfigValue(path?: string, defaultValue?: any): PropertyDecorator

Inject configuration to attribute. It will change realtime when the value changed in consul kv.

Stay in touch

License

NestCloud is MIT licensed.

You can’t perform that action at this time.