Skip to main content
Version: v2

New Configuration System

The Config.get Method

The legacy Config.get method has been removed and the Config.get2 method has been renamed to Config.get.

If you were still using the old method, update your code as follows:

// Version 1
const foobar = Config.get('hello.world');
const debug = Config.get<boolean>('settings.debug');
const port = Config.get('port', 3001);
const port = Config.get<number>('port', 3001);

// Version 2
const foobar = Config.get('hello.world');
const debug = Config.getOrThrow('settings.debug', 'boolean');
const port = Config.get('port', 'number', 3001);
const port = Config.get('port', 'number', 3001);

More details can be found here.

Environment Variables

Environment variables are no longer loaded by default. You must specify them explicitly.

For example, Config.get('settings.jwt.secret') will not return the environment variable SETTINGS_JWT_SECRET by default. To do this, you must specify it explicitly in a configuration file:

settings:
jwt:
secret: env(SETTINGS_JWT_SECRET)

The Config and ConfigMock services

The Config class can no longer be used as a service. You must use its static methods instead. Therefore, the ConfigMock class has also been removed.

// Before
export class Controller {
@dependency
config: Config;

foo() {
const foobar = this.config.get('foobar');
}
}

// After
export class Controller {
foo() {
const foobar = Config.get('foobar');
}
}

New features

Multiple .env files for each environment

Just like the JSON and YAML configuration files, it is now possible to have a separate .env file for each environment: .env.test, .env.production, etc.

The values provided in a .env.{environment} file override those defined in the default .env file.

Read an environment variable from .env

Environment variables defined in the .env file can be accessed through the Env.get method.

Comments and quotes in .env files

The .env files now support the use of comments and quotes.

# This a comment
HELLO="hello world"
HELLO='hello world'

JS configuration files

In addition to the JSON and YAML formats, configuration files can now also be written in JS.

const { Env } = require('@foal/core');

module.exports = {
settings: {
debug: false,
jwt: {
secret: Env.get('SETTINGS_JWT_SECRET')
}
}
}

Cloud PaaS providers

Since the configuration keys are no longer linked to a specific environment variable, deployment with PaaS providers is facilitated.

For example, in version 1, the URI of MongoDB had to be passed with the environment variable MONGODB_URI. If the cloud provider were giving the URI using the name MONGO_URI, things were becoming more difficult. This problem is now solved with the env(*) and Env.get features.