为什么我的Q保证不能工作?

我新承诺和Q,我试图转换在node-mysql中使用query的路由。 这里是我的代码摘录:

 var Q = require('q'); // connection defined elsewhere router.get('/', function(req, res) { var query = Q.denodeify(connection.query); var promise = query("-- query ommitted --", [req.user.id]); promise.then(console.log, console.error); }); 

我试图从现有的设置,不使用承诺转换这一点,所以我知道连接设置正确,查询是有效的。 每当我尝试请求这条路线时,我都会在stderr中得到相同的信息:

 [TypeError: Cannot read property 'connectionConfig' of undefined] 

我不知道它来自哪里,所以我不知道如何find完整的堆栈跟踪。 我也尝试了这个代码的替代版本,我有我自己的function,而不是console.logconsole.error ,但是这个function从来没有被调用,并出现相同的错误。

更新回答:

当您对查询方法进行分类时,您可能会失去connection的词法范围。

看看Q文档说这可能是一个问题:

如果你正在使用方法而不是简单的函数,那么你可以很容易地运行一些将方法传递给另一个函数的常见问题,比如Q.nfcall-将方法从其拥有者中解除绑定。

要解决这个问题,请使用Q.nbind代替:

 var query = Q.nbind(connection.query, connection); var promise = query("-- query ommitted --", [req.user.id]); promise.then(console.log, console.error); 

原始答案:

查看node-mysql源文件,访问connectionConfig的唯一地方是在Pool.js中 。 所以我的猜测是,你有一个关于如何configuration池的问题。