为什么我的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.log
和console.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池的问题。