Я использую ClaudiaJS для развертывания бессерверного API (Lambda + API Gateway). В моем API я обращаюсь к RDS Postgres с помощью pg-pool.
Что я наделал:
В app.js
var ApiBuilder = require('claudia-api-builder'),
api = new ApiBuilder();
module.exports = api;
var Pool = require('pg-pool');
api.get("/list", function (request) {
var dbconnect = {
user: ‘xxxx’, //env var: PGUSER
database: ‘xxxx’, //env var: PGDATABASE
password: ‘xxx’, //env var: PGPASSWORD
host: ‘xxxxxxxxxx.eu-west-1.rds.amazonaws.com', // Server hosting the postgres database
port: 5432, //env var: PGPORT
max: 1,
min: 0,
idleTimeoutMillis: 300000,
connectionTimeoutMillis: 1000
};
var pool = new Pool(dbconnect)
var sql = ‘Select …’
pool.query(sql, function (err, result) {
console.log('Lambda :: execute query ');
var resp = new Object();
var jsonArr = []; // Populate the result
console.log('Lambda :: result :: ' + JSON.stringify(result));
return JSON.stringify(result)
});
}
В чем проблема: ничего не возвращает, и Cloudwatch тоже не показывает ошибок. Я погуглил, и люди сказали, что он не завернут в Promise. Мой вопрос в том, как обернуть pg-pool в Promise в этом случае.
Любое предложение приветствуется. Спасибо
****Обновлять****
Я пытался использовать обещание в пуле
pool.connect().then(client => {
client.query(sql).then(res => {
client.release()
console.log('Result:', res.rows[0])
return JSON.stringify(res.rows[0]);
})
.catch(e => {
client.release()
console.error('query error', e.message, e.stack)
})
})
Я получил ошибку от CloudWatch:
UnhandledPromiseRejectionWarning: отклонение необработанного обещания (идентификатор отказа: 1): ошибка: соединение прервано из-за тайм-аута соединения
handler
? Можете ли вы опубликовать, как вы вызываете этот код из своего обработчика? - person Noel Llevares   schedule 28.09.2017Pool
в обещание, если есть pg-prom, которая уже выполняет все это? ;) - person vitaly-t   schedule 28.09.2017