我有一个 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/