所以我在搞乱 Koa.js 和生成器,只是为了演示目的拼凑了一个简单的站点。我将 sqlite 与node-sqlite3
Q 一起用于承诺。这是我的数据库代码:
module.exports.getLogs = function(){
var deferred = Q.defer();
var results = [];
db.serialize(function(){
db.each("SELECT ipAddress, action, details, timestamp FROM logs", function(err, row) {
results.push({
ipAddress: row.ipAddress,
action: row.action,
details: row.action,
timestamp: new Date(row.timestamp)
});
}, function(){
deferred.resolve(results);
});
});
return deferred.promise;
}
所以基本上我只是 Q.defer 来“承诺”对数据库的调用。然后,在我的 koa 路线中,我有这个:
app.get('/logs', function *(){
var logs = yield db.getLogs();
yield this.render('logs', {logs: logs});
});
我遇到的问题是请求只是挂起,浏览器永远不会得到响应。真正奇怪的是,如果我yield db.getLogs()
在 db 之后放置一个 console.log 语句,我就可以看到结果。视图在那里,一切似乎都应该工作,但它根本没有。任何帮助我都会非常感激!