2013-03-29 26 views
1

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

主要是,当我试图获得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获取此值并使用它?

回答

1

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

Node.js/Express.js - How does app.router work?

如果您有关于执行顺序的疑问,它是在你的代码在不同的地方增加一些痕迹的console.log了解流量非常有用。

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

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