【问题标题】:Openwhisk failing to call compose postgre sqlOpenwhisk 无法调用 compose postgresql
【发布时间】:2017-08-16 14:41:45
【问题描述】:

我已经尝试了超过我愿意承认的时间来获得一个 openWhisk 函数来调用 Compose.io 上的 postgre sql 数据库。这是我的代码:

我最近的化身是这样的:

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 promise 而不是 postgre,它可以工作。我做错了什么?

【问题讨论】:

  • 澄清一下,我得到这个结果:{“error”: {} } 和日志消息 2017-08-14T02:39:07.29005115Z stdout: Connecting to Compose database
  • 另一篇文章:compose 数据库是在 Compose.io 上创建的,而不是在 bluemix 上创建的 - 这应该没问题,但也许不是。

标签: node.js postgresql openwhisk compose-db


【解决方案1】:

要使用 OpenWhisk 和任何数据库产品,您需要使用承诺的 JavaScript 代码;普通nodejs中使用的事件循环不可用。我有一个使用pg-promise 的示例(或多或少完全取自项目文档),它对我来说效果很好。试试这样的:

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 一起使用,如果这有助于鼓励您:)

【讨论】:

  • 非常感谢您的回复。我确实包括了我所有的节点模块。我会试试你的代码并报告。
  • 我在这里修改了一些代码:1) 不能重新初始化函数内的所有内容,而是只做一次 2) 在顶部创建另一个无用的 Promise 没有意义 3) 不能调用pgp.end() 不了解它的作用以及何时使用它。 @ChrisMiyachi
  • 感谢编辑,新版本更加整洁清晰!我也不确定额外的承诺,这是有道理的。
猜你喜欢
  • 1970-01-01
  • 2019-09-28
  • 2018-04-08
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2017-08-07
相关资源
最近更新 更多