RedisController.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /**
  2. * RedisController
  3. *
  4. * @description :: Connects to Redis using the node_redis and hiredis drivers
  5. * Handles redis routes
  6. * "If hiredis [pure C library] is installed, node_redis will use it by default.
  7. * Otherwise, a pure JavaScript parser will be used."
  8. * >> hiredis is installed for these tests
  9. */
  10. var h = require('../services/helper')
  11. var Promise = require('bluebird')
  12. // Can treat redis library as one that supports Promises
  13. // these methods will then have "-Async" appended to them.
  14. var redis = Promise.promisifyAll(require('redis'))
  15. var client = redis.createClient(6379, '127.0.0.1', {})
  16. client.on('error', function (err) {
  17. console.log('Redis Error: ' + err)
  18. // Do nothing further if Redis errors/is unavailable
  19. });
  20. function redisWorldId(id) {
  21. return 'world:' + id
  22. }
  23. function randomWorldPromise() {
  24. var id = h.randomTfbNumber()
  25. var redisId = redisWorldId(id)
  26. var promise = client.getAsync(redisId)
  27. .then(function (worldValue) {
  28. return {
  29. id: id,
  30. randomNumber: worldValue
  31. }
  32. })
  33. .catch(function (err) {
  34. console.log(err.stack)
  35. })
  36. return promise
  37. }
  38. function redisSetWorld(world) {
  39. var redisId = redisWorldId(world.id)
  40. var promise = client
  41. .setAsync(redisId, world.randomNumber)
  42. .then(function (result) {
  43. return world
  44. })
  45. .catch(function (err) {
  46. console.log(err.stack)
  47. })
  48. return promise
  49. }
  50. function redisGetAllFortunes() {
  51. var promise = client
  52. .lrangeAsync('fortunes', 0, -1)
  53. .then(function (fortuneMessages) {
  54. var fortunes = fortuneMessages.map(function (e, i) {
  55. return { id: i + 1, message: e }
  56. })
  57. return fortunes;
  58. })
  59. .catch(function (err) {
  60. console.log(err.stack)
  61. })
  62. return promise
  63. }
  64. module.exports = {
  65. Single: function(req, res) {
  66. randomWorldPromise()
  67. .then(function (world) {
  68. res.json(world)
  69. })
  70. .catch(function (err) {
  71. console.log(err.stack)
  72. })
  73. },
  74. Multiple: function(req, res) {
  75. var queries = h.getQueries(req)
  76. var worldPromises = []
  77. for (var i = 0; i < queries; i++) {
  78. worldPromises.push(randomWorldPromise())
  79. }
  80. Promise
  81. .all(worldPromises)
  82. .then(function (worlds) {
  83. res.json(worlds)
  84. });
  85. },
  86. Fortunes: function(req, res) {
  87. redisGetAllFortunes()
  88. .then(function (fortunes) {
  89. fortunes.push(h.ADDITIONAL_FORTUNE)
  90. fortunes.sort(function (a, b) {
  91. return a.message.localeCompare(b.message)
  92. })
  93. res.render('fortunes', { fortunes: fortunes })
  94. })
  95. .catch(function (err) {
  96. console.log(err.stack)
  97. })
  98. },
  99. Updates: function(req, res) {
  100. var queries = h.getQueries(req)
  101. var worldPromises = []
  102. for (var i = 0; i < queries; i++) {
  103. worldPromises.push(randomWorldPromise())
  104. }
  105. Promise
  106. .all(worldPromises)
  107. .map(function (world) {
  108. world.randomNumber = h.randomTfbNumber()
  109. return redisSetWorld(world)
  110. })
  111. .then(function (updated) {
  112. res.json(updated)
  113. })
  114. .catch(function (err) {
  115. console.log(err.stack)
  116. })
  117. }
  118. };