2017-08-14 38 views
1

我試過了更多的時間,而不是我承認要獲取openWhisk函數來調用Compose.io上的postgre sql datbase。這裏是我的代碼:Openwhisk未能調用撰寫postgre sql

我的最新的化身是這樣的:

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

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

 
} 
 

 
exports.main = myAction;

我有,我連接到不同的SQL數據庫(不撰寫)一個類似的例子並使用SQL承諾不postgre和它的作品。我究竟做錯了什麼?

+0

只是爲了澄清,我得到了這個結果:{ 「error」:{} }和這對於日誌消息2017 -08-14T02:39:07.29005115Z標準輸出:連接到撰寫數據庫 –

+0

另一部分:撰寫數據庫是在Compose.io上創建的,而不是在bluemix上 - 應該可以,但可能不會。 –

回答

2

要使用OpenWhisk和任何數據庫產品,您需要使用promisified 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/,並上傳。如果這有助於鼓勵你,那麼肯定可以使用組合Postgres和OpenWhisk :)

+0

非常感謝您的回覆。我確實包含了所有的節點模塊。我會嘗試你的代碼並回報。 –

+0

工作 - 欣賞幫助! –

+0

我在這裏修改了一些代碼:1)不能重新初始化函數內部的所有內容,而只是一次性執行2)沒有意義在頂部創建另一個無用的Promise 3)不能調用'pgp.end()'不知道它在做什麼以及何時使用它。 @ChrisMiyachi –