【发布时间】:2011-08-20 09:02:34
【问题描述】:
我正在使用带有 Express 的 Node.js,并且在我的路由中包含与此类似的代码:
requireLogin: function(req, res, next) {
User.find(req.session.userId)
.on('success', function(user) {
req.addListener('data', function(chunk) {
console.log("DATA: " + chunk);
}
next()
}
}
我正在使用 Sequelize 并且 User.find 方法正在访问数据库。问题是,我绑定的请求“数据”事件永远不会被触发。似乎数据事件在用户从数据库返回时已经被触发和处理,现在对它做任何事情都为时已晚。在上面的示例中,我可以将 req.addListener 移动到数据库回调之外,但实际上我在这里调用了 next() ,它不能移动。
next() 调用的以下所有路由中间件都无法访问请求数据,因为这些事件已被触发。更糟糕的是,他们只是挂起等待来自 req 的数据事件,因为它已经发生了。
我怎样才能以某种方式延迟数据事件,以便它可以从数据库回调中绑定?还是我误解了一些基本的东西,需要改变我的处理方式?
非常感谢。
编辑:我找到了relevant discussion in the nodejs Google group,这表明没有适合我的解决方案。
【问题讨论】:
-
解释为什么不能将
req向上移动。举一个更具体的例子。 -
@Raynos:我添加了“next()”函数调用,这实际上是我真实代码中的问题所在。我还在第二段中对此进行了扩展。