7

マーケットプレイスから(cf create-service経由で)ポストバックサービスを作成しましたが、これをnode.jsアプリケーションで使用したいと思います。作品) IVE 2質問クラウドファウンドリのバインドサービスが動作しない

1.i'veは以下を試してみましたが、開始することができ、アプリケーションのdoesntとログに私は私がここで何をしないのですENV varibleのための私の値として これを得ましたか?

これはコードです:ENVのvaribleのための私の値として

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

この私がここで何をしないのですか?

 OUT env variable host: 10.0.97.139 
    OUT port: 34807 
    OUT user: qmxgvfybloierztm 
    OUT password: mlofvwfsxmf7bqjr 
    OUT database: r8n13yjyql7hwrgc 
    OUT url: postgres://qmxgvfybloierztm:[email protected]: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); 
       } 
      }); 
     }); 

    })(); 


}); 

は、今私はcode of node-dbiによると、このエラー

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:[email protected]: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 
+0

https://docs.cloudfoundry.org/devguide/services/application-binding.html –

+0

@AmitKumarGuptaで動作するはずです - 感謝しかし、これではありません助け..すでに読んでいる:) –

+0

エラーのホストとポートと実際のホストとポートの間に大きな相違があるのはなぜですか?環境変数とポートのホストは、URLとエラーのホストとは異なります。ここで何が起こっているのかを明確にすることはできますか? – 10100111001

答えて

4

を得、PGアダプタは、エラーメッセージを見て

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); 

として接続URLを構築します

ERROR: connect: Error: connect ECONNREFUSED 10.0.97.135:5432 

あなたのコードはポートがpgに正しく転送されていないという事実を暗示するデフォルトのpostgresポート5432に接続しようとしています。 node-dbiソースコードはcfg.port変数を使用しないので、表示される 'url' ENV変数が信じられている場合は、pgライブラリにはpostgresインスタンスがリスンしている34607ポートが決して与えられないので、あなたの投稿にそれが存在する場合

注意もそのノード-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(); 

更新

与えられた解決策は、エラー

OUT ERROR: connect: Error: getaddrinfo ENOTFOUND undefined undefined:5432 
につながると協力すべきであると考えています

これは、dsnが与えられていないか、正確にはpgで解析されていないことを示す傾向があります。これにより、node-dbiは非常に古いバージョンのpgを使用しています。したがって、接続パラメータを文字列として使用することはお勧めしません。

使用している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のバージョンは2014年1月からの日付で、postgresのdsnの処理は2015年1月ですので、まだ公開されていません...

ログには矛盾があり、その理由はわかりません私はuriが正しいと思われるので、uriを直接使用してバイパスします。 node-dbiはPGの接続文字列を構築する方法を見て

、あなたはそれが働いて得れば、それはおそらくnode-dbiはとても「壊れやすい」ように見える理由を疑問に思う時間がかかるとsequelizeのような別のデータベースラッパーを使用します

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(); 

を試すことができますたとえば、pgを直接使用したくない場合などです。

その後

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

としてあたりhttp://docs.sequelizejs.com/en/latest/api/sequelize/

+0

質問を更新してください私が使用しているすべてのコードで、私はまだエラーが発生しました...任意のアイデア? –

+0

もしも他のコネクターがあればいいですよね... –

+0

私はすぐにそれを試してみましょう。私のチームはノードからjavaへの使用方法を変更したいと思っています。(どうすれば同じことができますか? java?単純なE2Eの例を提供することができますか?それはどのようにJavaで動作するように推奨されていますか?心配しないでください:)ノードの解決策がうまくいけば答えとして質問をマークします!ありがとう! –

関連する問題