2014-11-23 42 views
0

貓鼬連我創造了我的第一個器件的應用在IBM bluemix和我加入該服務的MongoDB:如何Bluemix

{ 
    "mongodb-2.4": { 
    "name": "mongodb-27", 
    "label": "mongodb-2.4", 
    "plan": "100", 
    "credentials": { 
     "hostname": "192.****.15", 
     "host": "192.****.15", 
     "port": 10021, 
     "username": "7d5be****9358a", 
     "password": "aede****dce9a", 
     "name": "43c5a237-9f3a-4df0-85f7-4df9a2d26a5d", 
     "db": "db", 
     "url": "mongodb://7d5be****9358a:aede****[email protected]****.15:10021/db" 
    } 
    } 
} 

然後我試着用貓鼬綁定的MongoDB服務:

var db; 
if (process.env.VCAP_SERVICES) { 
    var env = JSON.parse(process.env.VCAP_SERVICES); 
    if (env['mongodb-2.2']) { 
     db = mongoose.createConnection(env['mongodb-2.2'][0].credentials.url); 
     console.log ("Connected to mongodb-2.2 service"); 
    } 
    if (env['mongodb-2.4']) { 
     db = mongoose.createConnection(env['mongodb-2.4'][0].credentials.url); 
     console.log ("Connected to mongodb-2.4 service"); 
    } 
} else { 
    db = mongoose.connect('mongodb://7d5be****9358a:aede****[email protected]:10021/db'); 
} 

但不工作。我做了兩個與mongodb-2.2和mongodb-2.4服務的選項,因爲所有的教程都有mongodb-2.2但是我看到我的是2.4

我想用mongoose + ember創建一個帶REST API的應用程序,但是我需要解決數據庫連接問題。

+0

當你說這是行不通的你是什麼意思?你看到日誌中有輸出嗎?這在Bluemix上運行時失敗了,對嗎?因爲您無法從Bluemix之外的應用程序訪問mongodb服務。 – whitfiea 2014-11-24 11:30:29

回答

0

你可以嘗試像下面,它會刪除依賴於明確提到的MongoDB的版本:

/*var mongoUrl; */ 
var db; 
if (process.env.VCAP_SERVICES) 
{ 
     var env = JSON.parse(process.env.VCAP_SERVICES); 
     for (var svcName in vcapServices) 
     { 
      if (svcName.match(/^mongo.*/)) 
      { 
       db = mongoose.createConnection(env['mongodb-2.2'][0].credentials.url); 
       console.log ("Connected to mongodb-2.2 service"); 
       /* 
        mongoUrl = vcapServices[svcName][0].credentials.uri; 
       mongoUrl = mongoUrl || vcapServices[svcName][0].credentials.url; 
       break; */ 
      } 
     } 
     /*var mongo = require('mongoskin');/
     /*var db = mongo.db(mongoUrl, {native_parser:true}); */ 

PS:通過註釋代碼,我曾試圖用一個替代建立連接通過Bluemix到MongoDB中,你也可以嘗試兩種..

,我會建議使用如下的package.json條目:

"mongodb": "*", 
    "mongoskin": "*" 
0

您可以優化的方式使用環境變量VCAP_SERVICES以匹配mongodb版本。 象下面這樣:

for (var svcName in vcapServices) 
{ 
if (svcName.match(/^mongo.*/)){ 
if (env['mongodb-2.2']) { 
     db = mongoose.createConnection(env['mongodb-2.2'][0].credentials.url); 
     console.log ("Connected to mongodb-2.2 service"); 
    } 
    if (env['mongodb-2.4']) { 
     db = mongoose.createConnection(env['mongodb-2.4'][0].credentials.url); 
     console.log ("Connected to mongodb-2.4 service"); 
    } 
} else { 
    db = mongoose.connect('mongodb://7d5be****9358a:aede****[email protected]:10021/db'); 
} 

這裏有一些對你有用的鏈接> http://ryanjbaxter.com/2014/03/03/moving-an-existing-node-js-app-to-run-on-bluemix/ http://blog.mongodb.org/post/6587009156/cloudfoundry-mongodb-and-nodejs