如何使用node-redis检查redis数据库中是否存在列表?

tuwxkamq  于 2022-10-08  发布在  Redis
关注(0)|答案(1)|浏览(187)

我正在尝试根据从根路由访问的路由创建自定义列表。我使用快速路由参数来获取列表的名称,并将一些预定义的值添加到列表中。

但我想首先检查指定的名称(列表名称)是否还没有被Redis数据库中的另一个列表使用。我正在使用client.EXISTS命令检查指定的键(列表名称)是否存在,但它似乎根本不起作用。以下是我的代码:

app.get("/:customListName", (req, res) => {
  const customListName = req.params.customListName;
  console.log(customListName);

  client.exists(customListName, (err, reply) => {
    if (reply === 0) {
      console.log("Doesn't exist!");

      const multi = client.multi();
      const customList = ["Have fun!", "Play Games!", "Watch Movies!"];
      customList.forEach((item) => {
        multi.rPush(customListName, item);
      });
      multi.exec();
    } else {
      console.log("Exists!");
    }
  });
});

从代码中,我记录了访问的路由和一条消息,该消息指定是否存在列表或其他内容,但我惊讶地看到,显示了该路由(在本例中为‘home’),但没有记录任何消息,如下所示:

[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
home
vfh0ocws

vfh0ocws1#

Node Redis 4.x使用承诺而不是回调。我的猜测是您正在使用该版本,而这就是您问题的根源。试试这个:

app.get("/:customListName", async (req, res) => {
  const customListName = req.params.customListName;
  const itExists = await client.exists(customListName);
  if (itExists) {
    /* do one thing */
  } else {
    /* do something else */
  }
});

不是100%确定,但我认为.exists命令返回一个布尔值。但无论如何,它肯定是真的或假的,所以这段代码将以任何一种方式工作。

相关问题