While developing expressive.js, I ran into an issue where my development's express server was running on port 3000 but my production environment's server was running on port 4000. For that reason, among others, I needed to create a way to allow my application to have some custom configuration. I ended up settling with the following solution.
The idea is that I have two configuration json files in /config. config.json
is for server-specific configuration. For example, the port that expressjs
listens on, or my redis username and password, or my Twitter api token.
siteconfig.json
is for public-facing configuration. For example, the site's
name or custom footer content.
My config.js
file will read the two JSON files, parse them and export them as
config
.
I'll load my config into my app with var config = require('./config/config');
and my configuration will be accessible via config
and my site configuration
will be accessed via config.site
.
I also pass my site configuration to my views with [app.locals]:
app.configure(function() {
...
app.locals.config = config.site;
});
Coupled along with the fact that my .gitignore
ignores all files in /config,
the public repository will not contain any sensitive/user-specific information.