clientconfig
Super simple mechanism for passing config items, such as API connection URLs, debug modes, etc from server to client.
This is handy for apps built as single page apps where you're sending a pre-built js application to the client but still want to be able to pass it configuration information.
This is a very simple client side module (compatible with clientmodules and browserify). For more info see clientmodules repo and for more info on the approaches, check out humanjavascript.com.
Since we're using cookies, here are some pertinant warnings as so aptly put by @lauriro here:
Unless sent over a secure channel (such as HTTPS), the information in cookies is transmitted in the clear text.
All sensitive information conveyed in these headers is exposed to an eavesdropper.
A malicious intermediary could alter the headers as they travel in either direction, with unpredictable results.
A malicious client could alter the Cookie header before transmission, with unpredictable results.
In short, don't send sensitive info this way unless you're on https.
How does it work?
Clientconfig simply looks for a cookie named config
parses it at JSON and immediately wipes it out to avoid burdening subsequent requests with that extra overhead.
How do I use it?
On the serverside when serving up your reqeust set a cookie containing the values you'd like to pass to the client in JSON.
If you're using node.js, express and getconfig
it'd work like this:
sample config file:
{
"client": {
"apiConnectionUrl": "https://dev.api.com",
"debugMode": true,
"enviroment": "dev"
},
"otherServerConfigItems": {
"dbpasswords": "etc"
}
}
sample server:
var app = require('express')(),
config = require('getconfig');
app.get('/app', function (req, res) {
res.cookie('config', JSON.stringify(config.client));
res.render('app');
});
app.listen(80);
sample client usage:
var config = require('clientconfig');
console.log(config.apiConnectionUrl);
Installing
npm i clientconfig
Add it to your clientmodules or user browserify to include it in your app. voila!
Feedback
If you dig it, follow @HenrikJoreteg on the twitterwebs. If not, file issues or send pull requests :)
License
MIT