tools.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. var redis = require("redis");
  2. var uuidv4 = require('uuid/v4');
  3. /**
  4. * Redis存档的Hash消息管理工具
  5. * @param {Object} config 配置文件
  6. * @return {[type]} [description]
  7. */
  8. module.exports = function(conf)
  9. {
  10. /**
  11. * 初始化Redis连接
  12. * @return {[type]} [description]
  13. */
  14. var init = () => {
  15. this.conf = conf;
  16. // noderedis密码等选项
  17. var options = conf.redis_pwd ? { password: conf.redis_pwd } : null;
  18. // redis client instance
  19. this.client = redis.createClient(conf.redis_port, conf.redis_host, options);
  20. this.client.on("error", (err) => {
  21. console.log("redis Error " + err);
  22. });
  23. }
  24. /**
  25. * 删除Redis中的某条消息
  26. * @param {string} guid 消息ID
  27. * @param {function} callback 回调函数 (status: 成功1,失败0)
  28. * @return {[type]} [description]
  29. */
  30. this.delete = (guid, callback) => {
  31. this.client.hdel(this.conf.field_lists, guid,(err, status) => {
  32. if (callback) {
  33. callback(status);
  34. }
  35. });
  36. }
  37. /**
  38. * 获取一个不会重复的唯一ID
  39. * @param {Function} callback 回调函数,({ guid })
  40. * @return {[type]} [description]
  41. */
  42. this.getUniID = (callback) => {
  43. var guid = uuidv4();
  44. this.exists(guid, (exists) => {
  45. // 如果存在则递归重新获取,直到获取到不重复的GUID并返回
  46. exists ? this.getUniID(callback) : callback(guid);
  47. });
  48. }
  49. /**
  50. * 插入一条消息
  51. * @param {string} text 欲被插入的内容
  52. * @param {Function} callback 回调函数,( status:1|0, guid:string )
  53. * @example 回调函数 (status, guid) => { ... }
  54. * @return {[type]} [description]
  55. */
  56. this.insert = (text, callback) => {
  57. this.getUniID((guid) => {
  58. // 存入消息
  59. this.client.hset(conf.field_lists, guid, text, (err, status) => {
  60. var _status, _guid = false;
  61. if (status) { _status = true; _guid = guid }
  62. callback(_status, _guid);
  63. });
  64. })
  65. }
  66. /**
  67. * 检查是否存在某条消息
  68. * @param {string} guid 消息ID
  69. * @param {Function} callback 回调函数 (status: 存在1,不存在0)
  70. * @return {[type]} [description]
  71. */
  72. this.exists = (guid, callback) => {
  73. this.client.hexists(this.conf.field_lists, guid, (err, exists) => {
  74. callback(exists);
  75. });
  76. }
  77. /**
  78. * 获取某条消息
  79. * @param {string} guid 消息ID
  80. * @param {Function} callback 回调函数 (msg 消息内容)
  81. * @return {[type]} [description]
  82. */
  83. this.get = (guid, callback) => {
  84. this.client.hget(this.conf.field_lists, guid, (err, msg) => {
  85. callback(msg);
  86. });
  87. }
  88. // 初始化
  89. init();
  90. }