绑定云代工的服务无法正常工作

我已经从市场上创build了postgress服务(通过cf创build服务),我想在我的node.js应用程序中使用它(我能够在本地testing它的工作原理)第二个问题

1.我试过以下,应用程序无法启动,并在日志中,我得到了这个作为我的值为env varible我在这里错过了什么?

这是代码:

OK i've tried the following and the application doesnt able to start and in the log I got 

这作为我的值env varible我在这里想念什么?

  OUT env variable host: 10.0.97.139 OUT port: 34807 OUT user: qmxgvfybloierztm OUT password: mlofvwfsxmf7bqjr OUT database: r8n13yjyql7hwrgc OUT url: postgres://qmxgvfybloierztm:mlofvwfsxmf7bqjr@10.0.97.135:34607/r8n13yjyql7hwrgc OUT start create table OUT ERROR: connect: Error: connect ECONNREFUSED 10.0.97.135:5432 (function(){ if (null == process.env.VCAP_SERVICES) { var url = 'postgress://localhost:27017/local'; } else { var vcap_services = JSON.parse(process.env.VCAP_SERVICES); console.log("postgress URL: ", url); }; var DBWrapper = require('node-dbi').DBWrapper; var dbConnectionConfig = { uri: vcap_services['postgresql'][0].credentials.uri, host: vcap_services['postgresql'][0].credentials.hostname, port: vcap_services['postgresql'][0].credentials.port, database: vcap_services['postgresql'][0].credentials.dbname, user: vcap_services['postgresql'][0].credentials.username, password: vcap_services['postgresql'][0].credentials.password }; var dbWrapper = new DBWrapper('pg', dbConnectionConfig); dbWrapper.connect(); console.log("start create table"); dbWrapper.query("CREATE TABLE IF NOT EXISTS TAB1 ( firstname TEXT primary key, lastname varchar(20) )", function (err, results) { if (err) { console.log("error while inserting data " + err); } else { console.log("success to insert data: "); } }); })(); 

更新(杰罗姆答案后…)这是我所有的代码!

 "use strict"; var express = require("express"); var path = require("path"); var app = express(); var port = process.env.PORT || 3000; app.listen(port, function () { (function () { var DBWrapper = require('node-dbi').DBWrapper; var vcap_services = JSON.loparse(process.env.VCAP_SERVICES); var pgconf = vcap_services['postgresql'][0].credentials; var dbConnectionConfig = { dsn: pgconf.uri }; var dbWrapper = new DBWrapper('pg', dbConnectionConfig); dbWrapper.connect(); console.log("env variable host: " + pgconf.hostname) console.log("port: " + pgconf.port); console.log("user: " + pgconf.user); console.log("password: " + pgconf.password); console.log("database: " + pgconf.database); console.log("url: " + pgconf.uri); console.log("start create table"); dbWrapper.query("CREATE TABLE IF NOT EXISTS USER ( firstname TEXT primary key, lastname varchar(20) )", function (err, results) { if (err) { console.log("error while inserting data " + err); } else { console.log("success to insert data: "); } }); var data = { firstname: 'John5', lastname: 'Foo4444' }; //insert data dbWrapper.insert('USER', data, function (err, data) { if (err) { console.log("error to insert data: " + err); // John has been inserted in our table, with its properties safely escaped } else { console.log("test" + data); } }); //read data dbWrapper.fetchAll("SELECT * FROM USER", null, function (err, result) { if (!err) { console.log("Data came back from the DB.", result); } else { console.log("DB returned an error: %s", err); } dbWrapper.close(function (close_err) { if (close_err) { console.log("Error while disconnecting: %s", close_err); } }); }); })(); }); 

现在我得到了这个错误

 2016-07-26T11:55:49.69+0300 [App/0] OUT env variable host: undefined 2016-07-26T11:55:49.69+0300 [App/0] OUT port: 35058 2016-07-26T11:55:49.69+0300 [App/0] OUT user: undefined 2016-07-26T11:55:49.69+0300 [App/0] OUT password: hvevfgpjjtyqpr1d 2016-07-26T11:55:49.69+0300 [App/0] OUT database: undefined 2016-07-26T11:55:49.69+0300 [App/0] OUT url: postgres://fakttklwkxtfprgv:hvevfgpjjtyqpr1d@10.0.97.140:35058/ispkmc5psgdrwj4e 2016-07-26T11:55:49.69+0300 [App/0] OUT start create table 2016-07-26T11:55:49.69+0300 [App/0] OUT ERROR: connect: Error: getaddrinfo ENOTFOUND undefined undefined:5432 

根据node-dbi的代码 ,pg适配器build立连接url

 var cfg = this._connectionParams; if (connectionParams["dsn"]) { this._pgUrl = connectionParams["dsn"]; } else { this._pgUrl = 'pg://'+cfg.user+':'+cfg.password+'@'+cfg.host+'/'+cfg.database; } this._dbClient = new pg.Client(this._pgUrl); 

看到你的错误信息,

 ERROR: connect: Error: connect ECONNREFUSED 10.0.97.135:5432 

你的代码试图连接到默认的postgres端口,5432,这暗示端口没有被正确地转发到pg。 node-dbi源代码不使用cfg.portvariables,所以这可以解释你的bug,因为如果我们相信显示的“url”ENVvariables,pg库永远不会被赋予你的postgres实例被认为侦听的34607端口在您的文章。

还要注意,node-dbi在dsn存在的时候更喜欢它:

 this._pgUrl = connectionParams["dsn"]; 

你似乎有名为'url'的ENV中的dsn。

很难从外面给你确切的解决办法,但我相信它应该与之合作

 var DBWrapper = require('node-dbi').DBWrapper; var pgconf = vcap_services['postgresql'][0].credentials; var dbConnectionConfig = { dsn: pgconf.url }; var dbWrapper = new DBWrapper('pg', dbConnectionConfig); dbWrapper.connect(); 

更新

给定的解决scheme导致错误

 OUT ERROR: connect: Error: getaddrinfo ENOTFOUND undefined undefined:5432 

这往往表明dsn没有被给予或不被pg分析。 这导致我看到node-dbi使用一个非常旧的版本的pg 。 所以我们不应该尝试使用连接参数作为string。

你确认你使用的node-dbi版本是0.7.1吗?

我刚安装了node-dbi 。 它给了我0.7.1,在那里我可以阅读

  var cfg = this._connectionParams; this._pgUrl = 'pg://' + cfg.user + ':' + cfg.password + '@' + cfg.host + '/' + cfg.database; this._dbClient = new pg.Client(this._pgUrl); 

所以这个代码不符合我们在github上看到的。 该版本不处理dsn。

这可以通过https://github.com/DrBenton/Node-DBI/commits/master来确认。 0.7.1版本的date从2014年1月开始,postgres dsn处理是从2015年1月份开始的,所以还没有发布。

你的日志有一个差异,我不明白为什么说,主机是未定义的,所以我会绕过它使用uri直接,因为这似乎是正确的。

看看node-dbi如何构buildpg连接string,你可以试试

 var url = require('url'); var DBWrapper = require('node-dbi').DBWrapper; var pgconf = vcap_services['postgresql'][0].credentials; console.log(pgconf.uri); var parts = url.parse(pgconf.uri); var dbConnectionConfig = { user: parts.auth.split(':')[0], password: parts.auth.split(':')[1], host: parts.host, database: parts.pathname.substr(1) }; var dbWrapper = new DBWrapper('pg', dbConnectionConfig); dbWrapper.connect(); 

一旦你得到它的工作,这将是时候可能想知道为什么node-dbi看起来如此“脆弱”,并使用另一个数据库包装像sequelize例如,如果你不想直接使用pg

它应该随后工作

 var sequelize = new Sequelize(pgconf.uri, {}) 

按照http://docs.sequelizejs.com/en/latest/api/sequelize/