我遵循了一个快速演示,该演示让您使用 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 取回这个值并使用它?
最佳答案
问题与中间件设置的顺序有关。 app.use 调用的顺序是相关的。有关详细信息,请参阅以下问题:
Node.js / Express.js - How does app.router work?
当您对执行顺序有疑问时,在您的代码中的不同位置添加一些 console.log 跟踪以了解流程是很有用的。
在这里,您在设置自己的中间件函数之前调用 app.use(app.router) 以从 Redis 获取数据。所以 node.js 在有机会调用你的中间件函数之前路由请求。结果是在处理 get 查询时,永远不会调用 zrevrangebyscore,并且不会设置 req.inline。
如果您在调用 app.use(app.router) 之前定义和 app.use 中间件函数,它将起作用。
关于javascript - Express 没有找到它期望的 redis 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15712084/