gpt4 book ai didi

javascript - 将 Koa 与 bluebird 和 pg 一起使用

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:39 24 4
gpt4 key购买 nike

我有一个关于在 Postgres 中使用 Koa 的最佳方式的问题。我也(真的)喜欢使用 Bluebird,所以我采用了这种方法。

'use strict'; 

var db = require('./modules/db.js');
var koa = require('koa');
var app = koa();

app.use(function *(){

yield db.withConnection(function *(client){

let id = this.request.query.id;
let simple_data = yield client.queryAsync('select name from table1 where id = $1', [id]);

this.response.body = simple_data;
}.bind(this));
});

app.listen(3000);

这是 db.js 文件,基本上它使用了 Bluebird 文档中提到的内容。

... bla bla, some imports

Promise.promisifyAll(pg);

function getSqlConnection() {
var close;
return pg.connectAsync(connectionString).spread(function(client, done) {
close = done;
return client;
}).disposer(function() {
if (close) close();
});
}


function* withConnection(func){
yield Promise.using(getSqlConnection(), function (client){
return Promise.coroutine(func)(client);
});
}

module.exports.withConnection = withConnection;

你有什么改进的建议吗?我现在真的很喜欢它,我已经对它进行了广泛的测试(在负载下,出现错误/异常等),它似乎可以正常工作。我对这些生成器和其他 ES6 东西还很陌生,所以我可能遗漏了一些东西。我的问题基本上是为什么很少有人使用这种方法(我发现很难在网上找到例子)?

除了 pg 和 bluebird 之外,我还可以使用其他库,但我喜欢这些库,因为它们的下载量很大,我更喜欢使用流行的东西,因为我发现更容易找到这些库的博客文章、帮助和文档.谢谢!

最佳答案

Bluebird 是一个 promise 库,在这方面非常出色,但不应将其用作指导如何使用或使用什么数据库库。所有那些 Promise.promisifyAll(pg); 的东西实际上与现有的所有 promise 解决方案相比都很差——knex、massive.js、pg-promise 等。

如果您想要pg + bluebird 的最佳组合,请尝试pg-promise .

var promise = require('bluebird');

var options = {
promiseLib: promise // Use Bluebird as the promise library
};

var pgp = require("pg-promise")(options);

var db = pgp('postgres://username:password@host:port/database');

db.query('select name from table1 where id = $1', [1])
.then(function (data) {
})
.catch(function (error) {
});

该库还支持 ES6 生成器,因此您可以编写与示例中完全相同的代码。

来自 Tasks示例:

db.task(function * (t) {
let user = yield t.one("select * from users where id=$1", 123);
return yield t.any("select * from events where login=$1", user.name);
})
.then(function (events) {
// success;
})
.catch(function (error) {
// error;
});

关于javascript - 将 Koa 与 bluebird 和 pg 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com