const Config = use('Config')
const appSecret = Config.get('app.appSecret')
You are viewing the legacy version of AdonisJS. Visit https://adonisjs.com for newer docs. This version will receive security patches until the end of 2021.
In this guide, we learn how AdonisJs handles the application configuration and environment variables. By the end of this guide, you will know how to keep sensitive information secure and avoid configuration debt.
Before getting started, let’s understand the concept of configuration debt. Many Node.js applications face the issue of scattered configuration inside multiple files. For example:
Defining middleware config with the routes file.
Defining email setup details with in the service that sends the email.
For a new user working on the code base for the first time, it becomes a nightmare to find all the configuration, and they keep juggling within multiple files/directories.
In AdonisJs, we store all the configuration inside a separate directory called config
. All of the configuration files are loaded at boot time, and values can be accessed using the Config provider.
Let’s say we want to read the appSecret
from config/app.js
file.
const Config = use('Config')
const appSecret = Config.get('app.appSecret')
The values are fetched by defining the fileName.key
. Nested values can be fetched using dot-notation.
{
mysql: {
host: '127.0.0.1'
}
}
Now, access it as
Config.get('database.mysql.host')
// or with default value
Config.get('database.mysql.host', '127.0.0.1')
Also you can update the in-memory config value for a key as shown below.
Config.set('database.mysql.host', 'db.example.com')
Quite often you want to have a different configuration based upon the environment your code is running in. For example: Using sandbox secrets for a 3rd party service in development.
Also from the data integrity point of view, you should never share your production credentials with all of the developers working on a codebase.
Instead, these credentials are stored as environment variables on your production server and defined inside .env
file when developing the app locally.
APP_SECRET=
DB_HOST=
DB_USER=
Now you can access those variable by using the Env
provider.
const Env = use('Env')
Env.get('APP_SECRET')
Env.get() always returns a string. If you want to get a boolean value you’ll need to test it yourself with Env.get('…') === 'true'
|
At times you may want to load a different .env
file stored on your server at a different location. Same can be done as follows.
ENV_PATH=/user/.env node server.js
If .env
file is missing, AdonisJs throws an exception by default. However, you turn off the exception as follows.
ENV_SILENT=true node server.js
If your application is started with NODE_ENV=testing
, AdonisJs attempts to load .env.testing
file from the root of your application.
This file overrides the values from .env
file, so that you can have slightly different configuration when running tests.
DB_CONNECTION=sqlite