0.1.4 • Published 2 years ago

nestjs-async-config v0.1.4

Weekly downloads
10
License
MIT
Repository
github
Last release
2 years ago

nestjs-async-config

The async config module based on RESTful API, you can real time update your system config

Description

the async-config allow you to controll your system config in real time via RESTful API, sometimes, when you start your system, the system will read the config file, and if you want to change the config, you should update the file and restart the system, so, nestjs-async-config will help you to resolve the situation, however, nestjs-async-config can change the db config, but, can't reconnect the db, so, the nestjs-async-config module is only work on current system config, not others.

Getting Started

  • set the nestjs-async-config module

you should write a setting.yml file in the project root folder, the same level of the node_modules folder, or you can set the env params of the system (process.ENV)

if you don't have the setting.yml, async-config-module will read process.ENV

# the config of setting.yml, and you should not to change the config when your system is running
store:
  type: "redis"     # here are three types, local/redis/mongodb, the default type is local, when you write a wrong type, here will be default type
  uri: "xxxxxx"  # if the type is redis or mongodb, the option uri and options will work, redis uri is redis://xxx, mongodb uri is mongodb://xxx
  options:
    xx: yy  # all redis or mongodb connection options can write here
    
# if type is mongodb, you should point the database, and ensure that the mongodb account can create collection, the module will create a collection called async_config in the pointed database 
# here are all store params below
Param NameENV NameDefaultDetails
typeASYNC_CONFIG_TYPElocalyour store type, suport for local memory/redis/mongodb
uriASYNC_CONFIG_URI-when the type is redis/mongodb, here will be writed necessarily
collectionASYNC_CONFIG_COLLECTIONasync_configwhen the type is mongodb, you can point the collection to store your config, however, you should point the database via uri firstly. This param is not support other type excepted mongodb
flagASYNC_CONFIG_FLAGasync_configwhen the type is mongodb, yon can point a special config document of the same collection, so, you can manage your config env through one database, one collection. This param is not support other type excepted mongodb
optionsASYNC_CONFIG_OPTIONS{}this is an object for redis/mongodb, this one allow you can set the redis/mongodb options here, like keyPrefix/connectionPool etc.
  • write your system local config file .env

you can write the .env file at the project root folder, if the async-config module haven't been inited, .env will init the conifg, if the async-config module had been inited before when the setting type is redis/mongodb, the module will read the config from database first, if the database doesn't have the config, the module will read the .env file and update configs to the database. Meanwhile, you should use the yaml formation to write the .env file.

  • init the module in the entrance file
# main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { initConfig } from 'nestjs-async-config';

async function bootstrap() {
  await initConfig();
  const app = await NestFactory.create(AppModule);
  await app.listen(4000);
}
bootstrap();
  • add the module to your system project
# app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AsyncConfigModule } from 'nestjs-async-config2';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
      AsyncConfigModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  • use it
# xxx.module.ts
import { Config } from 'nestjs-async-config';

@Module({
  controllers: [XXXController],
  providers: [XXXService, Config],
})
export class XXXModule {}

# xxx.service.ts
import { Injectable, Inject } from '@nestjs/common';
import { Config } from 'nestjs-async-config';

@Injectable()
export class XXXService {

  constructor(
      @Inject(Config) readonly config: Config,
  ) {}

}
  • enjoy it!

API Document

Update the config

  • Path: /config/update
  • Method: PUT
  • Params:
NameRequiredTypeDetail
doctrueObjectyou can write the object to update config
example:

{
    "doc": {
        "admin": {
            "password": 123456
        }
    }
}

// then, the api will update the field of "admin" of the config
  • Response:
// responese structure
{
    "code": xxx,
    "msg": yyy
}
codemsg
10000current configs
10001params error

delete the config

  • Path: /config/delete
  • Method: DELETE
  • Params:
NameRequiredTypeDetail
keytrueStringthe config's key, outermost layer of the config
example:

// if the current config is { "admin": {"password": 123456} }

{
    "key": "admin"
}

// then, the api will delete the field of "admin" of the config, however, you can't delete the field "password", it is not the outermost layer of the config, the "delete" is only support the first layer of the configs
  • Response:
// responese structure
{
    "code": xxx,
    "msg": yyy
}
codemsg
10000current configs
10001params error
10002"the key is not found"

find a config

  • Path: /config/find/:key
  • Method: GET
  • Params:
NameRequiredTypeDetail
keytrueStringthe config's key, outermost layer of the config
example:

// if the current config is { "admin": {"password": 123456} }

{
    "key": "admin"
}

// then, the api will find the field of "admin" of the config, however, you can't delete the field "password", it is not the outermost layer of the config, the "find" is only support the first layer of the configs
  • Response:
// responese structure
{
    "code": xxx,
    "msg": yyy
}
codemsg
10000current config of the key
10001params error
10002"the key is not found"

list all system configs

  • Path: /config/list
  • Method: GET
  • Params: null
  • Response:
// responese structure
{
    "code": xxx,
    "msg": yyy
}
codemsg
10000current configs
10001params error

list all nestjs-async-config module configs

  • Path: /config/module/list
  • Method: GET
  • Params: null
  • Response:
// responese structure
{
    "code": xxx,
    "msg": yyy
}
codemsg
10000current configs
10001params error

License

This library is published under the MIT license. See LICENSE for details.