Ajax 具有节点的Redis smembers

Ajax 具有节点的Redis smembers,ajax,node.js,redis,Ajax,Node.js,Redis,我有一个节点、Express和WebSocket聊天应用程序。当前聊天室中用户的用户名存储到Redis。当我在SMEMBERS'onlineUsers'中键入时,我会从redis cli中获得当前房间中所有用户的列表: 127.0.0.1:6379> smembers 'onlineUsers' 1) "jackson" 2) "bubba yump" 3) "dog" 4) "rumba" 5) "buba" 在我的主应用程序javascript文件中,我有一个获取当前用户的

我有一个
节点、Express和WebSocket
聊天应用程序。当前聊天室中用户的用户名存储到
Redis
。当我在
SMEMBERS'onlineUsers'
中键入时,我会从
redis cli
中获得当前房间中所有用户的列表:

127.0.0.1:6379> smembers 'onlineUsers'
 1) "jackson"
 2) "bubba yump"
 3) "dog"
 4) "rumba"
 5) "buba"
在我的主应用程序
javascript
文件中,我有一个获取当前用户的方法,以便在页面上显示他们:

var showCurrentUsers = function(){
    $('#list_of_users').empty();
    $.getJSON('getUsers', function(data){
        console.log(data)
        for (var i in data){
             $('#list_of_users').append("<li> User: "+data[i]+"</li>")
        }
    });
}
以下是用户名最初发布到数据库的位置:

  client.on("setUsername", function(user){
            pub.publish("chatting","A new user in connected:" + user);
            db.sadd("onlineUsers",user);
        }
    );
我知道用户名正确地发布到数据库中,我可以从redis cli访问它们,但我不确定为什么我的JSON调用返回的是
true
,而不是列表。

(我假设您正在使用)

节点redis客户端是异步的。您可以将其视为写入和删除的同步,但要从db读取,需要使用回调

app.get('/getUsers', function(req, res, next){
   getOnlineUsers(function (err, onlineUsers) {
     if (err) {
       return next(err);
     }
     res.send(onlineUsers);
   });
 });

// REDIS DATA
var getOnlineUsers = function(cb){
  return db.smembers("onlineUsers", cb);
}
请注意,
db.sadd(“onlineUsers”,用户),例如
db.sadd(“onlineUsers”,user,function(err){if(err){handle(err);})
app.get('/getUsers', function(req, res, next){
   getOnlineUsers(function (err, onlineUsers) {
     if (err) {
       return next(err);
     }
     res.send(onlineUsers);
   });
 });

// REDIS DATA
var getOnlineUsers = function(cb){
  return db.smembers("onlineUsers", cb);
}