ajax - Redis 成员与 Node

标签 ajax node.js redis

我有一个 Node、Express 和 Websockets 聊天应用程序。当前在聊天室中的用户的用户名存储到 Redis。在 redis-cli 中,当我输入 SMEMBERS 'onlineUsers' 时,我得到了房间中当前所有用户的列表:

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>")
        }
    });
}

在我的 Node 服务器文件中,我有匹配的路由,但 db.smembers 一直返回 true 而不是用户列表。

app.get('/getUsers', function(req,res){
   res.send(getOnlineUsers());
 });

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

这是用户名最初发布到数据库的地方:

  client.on("setUsername", function(user){
            pub.publish("chatting","A new user in connected:" + user);
            db.sadd("onlineUsers",user);
        }
    );

我知道用户名已正确发布到数据库,我可以从 redis-cli 访问它们,但我不确定为什么我的 JSON 调用返回 true 而不是列表。

最佳答案

(我假设您使用的是 https://github.com/mranney/node_redis )

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

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);
}

关于ajax - Redis 成员与 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459070/

相关文章:

php - 使用 php 将数据插入 MySql 后使用 SweetAlert 显示消息

javascript - 在Windows 7上为node.js安装socket io

javascript - 通过 JavaScript 函数调用 Web API

Redis故障转移场景

javascript - 使用 Javascript 从 Rails 通配符命名的选择列表中获取选择值

jquery - 奇怪的 AJAX 重定向问题

php - 在 Redis 中,您将如何更新 key 并重置原始 TTL?

Node.js redis 订阅内存泄漏

jquery - “SQLSTATE[23000] : Integrity constraint violation: 1062 Duplicate entry

javascript - 我是否需要在每个模块文件中使用 Promise.promisifyAll() ?