当前位置: 首页 > 面试题库 >

使用node_redis时如何访问传递给hgetall的密钥?

楚和悌
2023-03-14
问题内容

我有一个node.js(快速)应用程序,并且我正在使用node_redis从Redis数据库中获取所有用户。

redis = require "redis"
client = redis.createClient()

client.smembers "users", (err, user_ids) ->
  results = new Array()
  for user_id in user_ids
    client.hgetall user_id, (err, items) ->
      results.push items
      if user_ids.length is results.length
        res.json results

这将产生以下结果:

[
  {
    "name": "user1",
    "password": "secret"
  },
  {
    "name": "user2",
    "password": "secret"
  }
]

现在,我希望将user_id添加到用户结果中,以便获得以下输出:

[
  {
    "user:1": {
      "name": "user1",
      "password": "secret"
    }
  },
  {
    "user:2": {
      "name": "user2",
      "password": "secret"
    }
  }
]

我的问题是 client.hgetall() 是异步调用的,我不能简单地在for循环中访问user_id。


问题答案:

您需要通过在循环中引入一个函数来使用闭包来存储user_id。一种方法是使用forEach函数在数组上进行迭代。

这是Javascript中的示例:

var redis = require('redis')
var client = redis.createClient();

function fetch( callback ) {
   var results = new Array();
   client.smembers( "users", function(err,users) {
      if ( users.length == 0 )
         return callback( results );
      users.forEach( function(id) {
         client.hgetall(id, function(err,items) {
            var obj = {};
            obj[id] = items; # here id can be accessed since it is part of the closure
            results.push(obj);
            if ( results.length == users.length ) {
               callback( results );
            }
         });
      });
   });
}

fetch( function(results) {
   console.log(JSON.stringify(results));
});

输出为:

[ {"user:2":{"name":"user2","password":"secret2"}},
  {"user:1":{"name":"user1","password":"secret"}} ]


 类似资料:
  • 问题内容: 我知道不推荐这样做,但是是否可以将用户密码传递给scp? 作为批处理作业的一部分,我想通过scp复制文件,接收服务器当然需要密码,不,我不能轻易地将其更改为基于密钥的身份验证。 问题答案: 您就可以使用一个工具脚本它预期(有得心应手绑定太像Pexpect的为Python)。

  • 问题内容: 如何在Go中访问命令行参数?不会将它们作为参数传递给。 一个完整的程序(可能是通过链接多个程序包创建的)必须具有一个名为main的程序包,并具有一个功能 定义。函数main.main()不带参数,也不返回值。 问题答案: 您可以使用变量访问命令行参数。例如, 您还可以使用flag软件包,该软件包实现命令行标志解析。

  • 我找不到如何将用户名和密码传递给KafkaConsumer。我使用SASL明文对Kafka服务器上的客户端进行身份验证。 我试图在上找到此信息https://kafka.apache.org/documentation/#consumerconfigs但结果是否定的。 我发现了一些作者使用参数“用户名”和“密码”的例子。我试图这样做: 但我得到了例外"未能构建Kafka消费者"。 如果有人知道如何

  • 今天早些时候,我问了一个关于使用ZenDesk API进行ajax调用的问题。 我可以在命令提示符下成功运行以下命令,并在ZenDesk中创建一个票证(是api令牌字符串): 我现在试图理解的是如何将其转换为ajax调用。这是我下面的文档。 我目前正在做的事情如下: 以下是我已经看过的一些答案和文档,但我仍然很困惑: (最佳之一):https://auth0.com/blog/using-json

  • 是否可以通过context将对象(比方说User(包含3个字符串属性-name、password、detail)传递给thymeleaf模板,并从模板中访问它的属性,例如 ? 如果是这样,我该怎么做? 匿名用户 如果你正在使用spring和thymeleaf,那么它们应该像魅力一样为你工作。在这种情况下,它非常简单: 其中myTemplate引用,其内容如下所示: 和我的实体 和我使用的沉香酒的版

  • 问题内容: 我创建了一个参数化的Jenkins作业,该作业将变量从Java传递到。 这是Java: 所以这很简单,因为我只是将s 传递给工作。但是,我现在想使用Jenkins中的A将A传递给工作。 我看到的一件事是Jenkins中的拥有一个和。因此,甚至不知道如何从Java将其设置为参数。 这可能吗? 问题答案: 这是一个可运行的类。使用apache-httpclient(4.5.1)和相关的ja