Openwhisk не в состоянии вызвать составить Postgre SQL

Я пытался больше часов, чем хочу признать, получить функцию openWhisk для вызова базы данных sql postgre на Compose.io. Вот мой код:

Мое последнее воплощение таково:

function myAction(params) {
 return new Promise(function(resolve, reject) {
    console.log('Connecting to Compose database');
 // console.log('Params ---> ', params);
    var mysql = require('promise-mysql');
 var fs = require('fs');
 var pg = require('pg');
 var request = require('request')
 var Promise = require('promise/lib/es6-extensions');
 var connString = "postgres:xxxx";
 
 
 
  pg.connect(connString, function(err, client, done) {
   console.log("connectiong..", err, client, done);
   
          if (err) {

            console.log('[connectToCompose] failed to fetch client from pool', err);
            reject(err);

          } else {
            params.client = client; params.done = done;
            console.log('[connectToCompose] obtained a Compose client');
            return(params);

          }
       
  })
  
 // params.client.done();
 // console.log("closing connectiong");
 })

}

exports.main = myAction;

У меня есть похожий пример, где я подключаюсь к другой базе данных SQL (не Compose) и использую обещание sql, а не postgre, и это работает. Что я делаю неправильно?

1 ответ

Решение

Для работы с OpenWhisk и любым предложением базы данных вам нужно использовать обещанный код JavaScript; цикл обработки событий, используемый в обычных nodejs, недоступен. У меня есть пример, который использует pg-обещание (более или менее точно взято из документации проекта), и он прекрасно работает для меня. Попробуйте что-то вроде этого:

const promise = require('bluebird');

const initOptions = {
    promiseLib: promise // overriding the default (ES6 Promise);
};

const pgp = require('pg-promise')(options);
const conn_info = {...connection info...};

const db = pgp(conn_info);

module.exports.main = function main(args) {
    db.any('SELECT * FROM items')
        .then(data => {
            console.log('DATA:', data);
            // return whatever data you wanted
            resolve({message: 'success'});
        })
        .catch(error => {
            console.log('ERROR:', error);
        });
}

Не все зависимости здесь доступны по умолчанию в OpenWhisk, поэтому при развертывании действия включите оба *.js файл и все node_modules/ в ZIP-файл, и загрузить его. Определенно возможно использовать Compose Postgres с OpenWhisk, если это поможет вам ободрить:)

Другие вопросы по тегам