var web = require('webjs'); var redis = require('redis'); var client = redis.createClient(); // webjs style web.run(process.argv[2] || 8080) .config({ 'views': __dirname + '/views', 'view engine': 'ejs', // jade, etc. 'foo': 'bar', 'redisClient': client, 'readonly': false }) .use( // Faster Middleware '/static', web.static(__dirname + '/assets'), // Normal Middlewares web.query(), web.cookieParser('webjs'), web.session({ secret: 'webjs', maxAge: 5 * 60 * 1000 }), web.compiler({ enable: [ 'less' ] }), web.compress(), function(req, res, next) { // Response Pipeline var startTime = process.hrtime(); res.on('pipelining', function() { var diff = process.hrtime(startTime); console.log( '%s %s - %d %s', req.method.toUpperCase(), req.url, res.statusCode, (diff[0] * 1e9 + diff[1]) / 1e6 + 'ms' ); }); next(); } ) .get({ '/': function(req, res) { res.send('Hello World!'); }, '/echo/:msg': function(req, res) { res.send(req.params.msg); }, '/view/:view': function(req, res) { res.render(req.params.view, { view: req.params.view }); // /view/foo => render /views/foo.ejs }, '/ping': function(req, res) { res.long(); (function loop(arr) { if (arr.length > 0) { res.send(arr.shift()); setTimeout(function() { loop(arr); }, 500); } else { res.end(); } })(['p', 'o', 'n', 'g', '!']); }, '/get/:key': function(req, res) { web.meta('redisClient').get(req.params.key, function(err, value) { if (err) { return res.sendError(err); } value = value || 'no such key'; res.send(value); }); } }) .put('/set/:key', function(req, res) { web.meta('redisClient').set(req.params.key, req.body().toString() /* Raw body */, function(err) { if (err) { return res.sendError(err); } res.send('OK'); }); }) .post({ '/incr/:key': function(req, res) { web.meta('redisClient').incr(req.params.key, function(err, currValue) { if (err) { return res.sendError(err); } res.send(currValue); }); }, '/append/:key': function(req, res) { web.meta('redisClient').append(req.params.key, req.body().toString(), function(err, length) { if (err) { return res.sendError(err); } res.send(length); }); } });