123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /**
- * RedisController
- *
- * @description :: Connects to Redis using the node_redis and hiredis drivers
- * Handles redis routes
- * "If hiredis [pure C library] is installed, node_redis will use it by default.
- * Otherwise, a pure JavaScript parser will be used."
- * >> hiredis is installed for these tests
- */
- var h = require('../services/helper')
- var Promise = require('bluebird')
- // Can treat redis library as one that supports Promises
- // these methods will then have "-Async" appended to them.
- var redis = Promise.promisifyAll(require('redis'))
- var client = redis.createClient(6379, '127.0.0.1', {})
- client.on('error', function (err) {
- console.log('Redis Error: ' + err)
- // Do nothing further if Redis errors/is unavailable
- });
- function redisWorldId(id) {
- return 'world:' + id
- }
- function randomWorldPromise() {
- var id = h.randomTfbNumber()
- var redisId = redisWorldId(id)
- var promise = client.getAsync(redisId)
- .then(function (worldValue) {
- return {
- id: id,
- randomNumber: worldValue
- }
- })
- .catch(function (err) {
- console.log(err.stack)
- })
- return promise
- }
- function redisSetWorld(world) {
- var redisId = redisWorldId(world.id)
- var promise = client
- .setAsync(redisId, world.randomNumber)
- .then(function (result) {
- return world
- })
- .catch(function (err) {
- console.log(err.stack)
- })
- return promise
- }
- function redisGetAllFortunes() {
- var promise = client
- .lrangeAsync('fortunes', 0, -1)
- .then(function (fortuneMessages) {
- var fortunes = fortuneMessages.map(function (e, i) {
- return { id: i + 1, message: e }
- })
- return fortunes;
- })
- .catch(function (err) {
- console.log(err.stack)
- })
- return promise
- }
- module.exports = {
-
- Single: function(req, res) {
- randomWorldPromise()
- .then(function (world) {
- res.json(world)
- })
- .catch(function (err) {
- console.log(err.stack)
- })
- },
- Multiple: function(req, res) {
- var queries = h.getQueries(req)
- var worldPromises = []
- for (var i = 0; i < queries; i++) {
- worldPromises.push(randomWorldPromise())
- }
- Promise
- .all(worldPromises)
- .then(function (worlds) {
- res.json(worlds)
- });
- },
- Fortunes: function(req, res) {
- redisGetAllFortunes()
- .then(function (fortunes) {
- fortunes.push(h.ADDITIONAL_FORTUNE)
- fortunes.sort(function (a, b) {
- return a.message.localeCompare(b.message)
- })
- res.render('fortunes', { fortunes: fortunes })
- })
- .catch(function (err) {
- console.log(err.stack)
- })
- },
- Updates: function(req, res) {
- var queries = h.getQueries(req)
- var worldPromises = []
- for (var i = 0; i < queries; i++) {
- worldPromises.push(randomWorldPromise())
- }
- Promise
- .all(worldPromises)
- .map(function (world) {
- world.randomNumber = h.randomTfbNumber()
- return redisSetWorld(world)
- })
- .then(function (updated) {
- res.json(updated)
- })
- .catch(function (err) {
- console.log(err.stack)
- })
- }
- };
|