Configuring Express with Nconf
Nconf is a configuration tool that we will use to create hierarchical/environment configuration files for our application. Let's install Nconf:
npm install nconf --save
The first thing we will do is to move the following hardcoded port number from our Express application into our configuration:
app.set('port', 3000);
Let's create the module ./lib/configuration/index.js
, which will allow us to to read configuration data from JSON files. We import the nconf
module and define a constructor function, Config
. We then load a configuration file based on the current environment and load the default configuration that holds non-environmental configuration data. We also define a function get(key)
, which accepts a key and returns a value. We will use this function to read configuration data:
var nconf = require('nconf'); function Config(){ nconf.argv().env("_"); var environment = nconf.get("NODE:ENV") || "development"; nconf.file(environment, "config/" + environment + ".json"); nconf.file("default", "config/default.json"); } Config.prototype.get = function(key) { return nconf.get(key); }; module.exports = new Config();
Let's write some configuration for our application. Add the following default configuration to ./config/default.json
; this will be shared amongst all environments:
{ "application": { "name": "vision" } }
Now add the following configuration to the development, test, and coverage config files: ./config/development.json
, ./config/test.json
, and ./config/coverage.json
.
{ "express": { "port": 3000 } }
Let's change our Express server ./lib/express/index.js
so that it reads express:port
from configuration:
var express = require('express') , http = require('http') , config = require('../configuration') , app = express(); app.set('port', config.get("express:port")); app.get('/hearbeat', function(req, res){ res.json(200, 'OK'); }); http.createServer(app).listen(app.get('port')); module.exports = app;