Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alaricode/nestjs-consul
NestJS consul package allows you to load configs from consul and work with key/values.
https://github.com/alaricode/nestjs-consul
consul javascript nestjs nodejs typescript
Last synced: 2 months ago
JSON representation
NestJS consul package allows you to load configs from consul and work with key/values.
- Host: GitHub
- URL: https://github.com/alaricode/nestjs-consul
- Owner: AlariCode
- License: mit
- Created: 2020-07-23T16:17:13.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-03-05T07:30:26.000Z (almost 2 years ago)
- Last Synced: 2023-08-24T05:04:10.686Z (over 1 year ago)
- Topics: consul, javascript, nestjs, nodejs, typescript
- Language: TypeScript
- Homepage: https://purpleschool.ru
- Size: 703 KB
- Stars: 13
- Watchers: 1
- Forks: 5
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# NestJS consul config Module
![alt cover](https://github.com/AlariCode/nestjs-consul/raw/master/img/logo.jpg)
**More NestJS libs on [alariblog.ru](https://purpleschool.ru)**
**Updated for NestJS 9**[![npm version](https://badgen.net/npm/v/nestjs-consul)](https://www.npmjs.com/package/nestjs-dotenv)
[![npm version](https://badgen.net/npm/license/nestjs-consul)](https://www.npmjs.com/package/nestjs-dotenv)
[![npm version](https://badgen.net/github/open-issues/AlariCode/nestjs-consul)](https://github.com/AlariCode/nestjs-dotenv/issues)
[![npm version](https://badgen.net/github/prs/AlariCode/nestjs-consul)](https://github.com/AlariCode/nestjs-dotenv/pulls)NestJS consul package allows you to load configs from consul and work with key/values.
```bash
npm i nestjs-consul
```Then register module in your root app.module
```javascript
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`:
```javascript
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:```javascript
export interface YourConfig {
'your/keypath': {
value1: number,
value2: string,
};
}
```Then you can use your configs with public property `configs` of `ConsuleService`.
```javascript
import { ConsuleService } from 'nestjs-consul';constructor(
private readonly consul: ConsuleService
) {}myMethod() {
const configs = this.consul.configs;
}```
## Additional methods
### update()
Returns `Promise`. Force updates your config.
```javascript
await this.consul.update();
```### get(key: string)
Returns `Promise`. Gets a value from consul with `key` and `T` type.
```javascript
const value = (await this.consul.get) < MyInterface > 'my/key';
```### set(key: string, value: T)
Returns `Promise`. Sets a value to consul with `key` and `T` type. Returns `true` if succeeded.
```javascript
const response = (await this.consul.set) < MyInterface > ('my/key', value);
```### delete(key: string)
Returns `Promise`. Deletes a value from consul with `key`. Returns `true` if succeeded.
```javascript
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](https://github.com/AlariCode/nestjs-consul/raw/master/img/tests.png)