tools.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. var socket = { host: conf.redis_host, port: conf.redis_port };
  17. // noderedis密码等选项
  18. var options = { legacyMode: true, password: conf.redis_pwd, socket: socket };
  19. if (!options.password) delete options.password;
  20. // redis client instance
  21. this.client = redis.createClient(options);
  22. this.client.on("error", (err) => {
  23. console.log("redis Error " + err);
  24. });
  25. return this.client.connect();
  26. }
  27. /**
  28. * 删除Redis中的某条消息
  29. * @param {string} guid 消息ID
  30. * @param {function} callback 回调函数 (status: 成功1,失败0)
  31. * @return {[type]} [description]
  32. */
  33. this.delete = (guid, callback) => {
  34. this.client.hdel(this.conf.field_lists, guid,(err, status) => {
  35. if (callback) {
  36. callback(status);
  37. }
  38. });
  39. }
  40. /**
  41. * 获取一个不会重复的唯一ID
  42. * @param {Function} callback 回调函数,({ guid })
  43. * @return {[type]} [description]
  44. */
  45. this.getUniID = (callback) => {
  46. var guid = uuidv4();
  47. this.exists(guid, (exists) => {
  48. // 如果存在则递归重新获取,直到获取到不重复的GUID并返回
  49. exists ? this.getUniID(callback) : callback(guid);
  50. });
  51. }
  52. /**
  53. * 插入一条消息
  54. * @param {string} text 欲被插入的内容
  55. * @param {Function} callback 回调函数,( status:1|0, guid:string )
  56. * @example 回调函数 (status, guid) => { ... }
  57. * @return {[type]} [description]
  58. */
  59. this.insert = (text, callback) => {
  60. this.getUniID((guid) => {
  61. // 存入消息
  62. this.client.hset(conf.field_lists, guid, text, (err, status) => {
  63. var _status, _guid = false;
  64. if (status) { _status = true; _guid = guid }
  65. callback(_status, _guid);
  66. });
  67. })
  68. }
  69. /**
  70. * 检查是否存在某条消息
  71. * @param {string} guid 消息ID
  72. * @param {Function} callback 回调函数 (status: 存在1,不存在0)
  73. * @return {[type]} [description]
  74. */
  75. this.exists = (guid, callback) => {
  76. this.client.hexists(this.conf.field_lists, guid, (err, exists) => {
  77. callback(exists);
  78. });
  79. }
  80. /**
  81. * 获取某条消息
  82. * @param {string} guid 消息ID
  83. * @param {Function} callback 回调函数 (msg 消息内容)
  84. * @return {[type]} [description]
  85. */
  86. this.get = (guid, callback) => {
  87. this.client.hget(this.conf.field_lists, guid, (err, msg) => {
  88. callback(msg);
  89. });
  90. }
  91. // 初始化
  92. init();
  93. }