表示没有find它期望的redis结果

我跟着一个快速演示,你用redis存储值,然后检索它们。 当我尝试将代码适配到我设置的快速应用程序时,我无法获得预期的结果。

主要是,当我尝试获取req.online的长度,我得到一个错误,因为它有一个空值。

用下面的代码,我期望req.online.length有一些价值,而不是总是null ,从而引发错误。

这个贴的代码工作( req.online.length将等于2): http : req.online.length

此粘贴中的代码不起作用( req.online.length为空,尝试检查长度时发生错误): http : req.online.length

当我通过redis cli检查使用:

 ZREVRANGEBYSCORE online +inf -inf 

我可以看到按预期存储的各种用户代理值。

我需要做什么才能从redis获得这个值并使用它?

问题与中间件设置的顺序有关。 app.use调用的顺序是相关的。 有关更多信息,请参阅以下问题:

Node.js / Express.js – app.router如何工作?

如果您对执行顺序有疑问,可以在代码中的各个位置添加一些console.log跟踪以了解stream程。

在这里,您可以在设置自己的中间件函数以从Redis获取数据之前调用app.use(app.router)。 所以node.js在有机会调用中间件函数之前路由请求。 结果是zrevrangebyscore从来没有被调用,并且req.inline没有设置,当get查询被处理时。

如果您在调用app.use(app.router)之前定义并app.use中间件函数,它将工作。