使用Hubot连接到Redis而不使用brain
目标
-
- hubotからredisに格納されたデータを利用したい
- hubotには永続化層としてhubot brainが用意されていて、redisを利用できるが、hubot brainではキー名に制限があるのでこれを使わずに実現したい
例子
在hubot的package.json中的dependencies中添加redis。
(省略)
"dependencies": {
"hubot": ">= 2.6.0 < 3.0.0",
"hubot-scripts": ">= 2.5.0 < 3.0.0",
"hubot-slack": ">= 2.2",
"redis": "0.8.4"
},
(省略)
# Description:
# Redis Test
#
# Dependencies:
# "redis": "0.8.4"
#
# Commands:
# hubot redis-get message
# hubot redis-get message "Hello, World!!"
#
# Authors:
# metheglin
Redis = require "redis"
module.exports = (robot) ->
robot.respond /redis-get (.*)$/i, (msg) ->
redis_key = msg.match[1].trim()
client = Redis.createClient()
client.get "#{redis_key}", (err, reply) ->
if err
throw err
else if reply
result = JSON.parse( reply )
msg.send result
else
msg.send "key: #{redis_key}は見つかりません."
robot.respond /redis-set ([^\s]*) (.*)$/i, (msg) ->
redis_key = msg.match[1].trim()
redis_val = msg.match[2].trim()
client = Redis.createClient()
client.set "#{redis_key}", "#{redis_val}", (err, keys_replies) ->
if err
throw err
稍微注意的一点是,如果想要将 Redis 数据的获取结果返回给 Hubot 流,就需要等待获取结果。
因为 Redis 的 `client.get` 是异步的,所以必须在回调函数内部使用 `msg.send`。
■执行结果
Hubot> hubot redis-get "message"
Hubot> key: "message"は見つかりません.
Hubot> hubot redis-get message
Hubot> key: messageは見つかりません.
Hubot> hubot redis-set message "Hello, World!!"
Hubot> hubot redis-get message
Hubot> Hello, World!!
参考资料
- https://github.com/mranney/node_redis