javascript - Express 没有找到它期望的 redis 结果

标签 javascript node.js express redis

我遵循了一个快速演示,该演示让您使用 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/

相关文章:

javascript - 使用移动设备在桌面浏览器中扫描条形码

javascript - 在 android phonegap 上获取 SharedPreference 值

node.js - 在angularjs中通过history.replacestate更改url时如何停止页面刷新?

node.js - 检查应该定义一个 Controller

javascript - NodeJS 未处理的拒绝错误 : Can't set headers after they are sent

javascript - 从 HTML 文件加载页面后调用 ".js"文件中的 JavaScript 函数

PHP mysql_query() 无法查询请求的 sql

node.js - 如何将日期和天数添加到当前日期

javascript - 使用额外的括号调用对象方法

node.js - express.js,为什么 res.write 不在 api 引用中