У меня есть вопрос о наилучшем способе использования Koa с Postgres. Я также (действительно) люблю использовать Bluebird, поэтому я пошел с таким подходом.Использование Koa с bluebird и pg
'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, но мне нравится, что из-за количества загрузок, которые у них есть, я предпочитаю использовать популярные материалы, потому что мне легче найти записи в блогах, помощь и документацию для те. Благодаря!
В моих программах Koa, я использую 'со-pg', который облегает' модуль pg' выставить интерфейс обещание, поэтому 'исходный код соавтора pg' мощи поместите вас на правильный путь. У меня есть базовое приложение Koa 1.x, которое демонстрирует, как мне нравится использовать Koa с Postgres: https://github.com/danneu/koa-skeleton/blob/master/src/db/index.js (также проверьте мой файл 'db/util.js'). – danneu