Application Environment
It is a common practice that applications read some environment variables to decide some of their behaviors, e.g. running in prodction mode or development mode. Environment object is used to store environment related information.
Obtain the environment object
The environment object can be obtained via require('dorapan').environment.
Define environment
- Environment can be defined in global configuration.
- It can be defined via
procfile.jsas well. Here is an example:
module.exports = function(pandora) {
// If no parameter given, current environment object is returned
pandora.environment(UrEnvironmentClass);
}
Frequently Used Interfaces
The behaviors of environment object are described by its Interface Environment 。
They are listed as below:
get(name: string): any
Retrive the value of an environment variable via its name There are some reserved variable names:
- env -> environment identifier,e.g. production/development.
- appName -> name of current application
- appDir -> root directory of current application
- pandoraLogsDir -> directory for storing Pandora log files, it is set to
~/logsas default.
match(name: string): boolean
Judge whether current environment matches the given environment identiifier.
Extends BaseEnvironment
Rather than implements the Environment interface by yourself, we suggest you extends the BaseEnvironment class, which includes some out-of-factory implementations already.
You can obtain the class via import {BaseEnvironment} from 'pandora'.
ref: BaseEnvironment
It adds a set() method and a constructor to the original interface.
Here is an example:
import {BaseEnvironment} from 'pandora';
export class ForceTestEnvironment extends BaseEnvironment {
constructor(variables?: any) {
variables = variables || {};
if(!variables.env) {
variables.env = 'test';
}
super(variables);
}
match(name: string): boolean {
return this.get('env') === name;
}
}
DefaultEnvironment
If there is no user defined Environment object given, Pandora uses DefaultEnvironment as default.
It uses process.env.NODE_ENV to define current environment. Here is the implementation:
switch (process.env.NODE_ENV) {
case 'production':
variables.env = 'production';
break;
case 'prepub':
variables.env = 'prepub';
break;
case 'test':
case 'unittest':
variables.env = 'test';
break;
default:
variables.env = 'development';
break;
}