1

我遵循了一个快速演示,该演示让您使用 redis 存储值,然后检索它们。当我尝试将该代码调整到我设置的 express 应用程序时,我无法获得预期的结果。

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

使用下面的代码,我希望req.online.length有一些价值,但它总是null如此,因此会引发错误。

此粘贴中的代码确实有效(req.online.length例如,等于 2): http: //pastebin.com/w4ALpFiT

此粘贴中的代码不起作用(req.online.length为空,尝试检查长度时抛出错误): http: //pastebin.com/r70juDZP

当我使用以下命令通过 redis cli 检查时:

ZREVRANGEBYSCORE online +inf -inf

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

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

4

1 回答 1

1

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

Node.js / Express.js - app.router 是如何工作的?

当您对执行顺序有疑问时,在代码中的各个位置添加一些 console.log 跟踪以了解流程很有用。

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

If you define and app.use the middleware functions before calling app.use(app.router), it will work.

于 2013-03-30T11:42:15.727 回答