如何在Bluemix中连接Mongoose

时间:2014-11-23 12:17:30

标签: node.js mongoose ibm-cloud

我在ibm bluemix中创建了我的第一个应用程序并添加了服务mongodb:

{
  "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****dce9a@192.****.15:10021/db"
    }
  }
}

然后我尝试使用mongoose绑定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****dce9a@192.155.243.15:10021/db');
}

但它不起作用。我使用mongodb-2.2和mongodb-2.4服务做了两个选项,因为所有教程都有mongodb-2.2但我看到我的是2.4

我想使用mongoose + ember创建一个带有REST API的应用程序,但我需要解决数据库连接问题。

2 个答案:

答案 0 :(得分: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}); */

P.S:通过评论代码,我曾尝试使用替代方法通过Bluemix与mongodb建立连接,你可以尝试两种方式..

另外,我建议使用如下的package.json条目:

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

答案 1 :(得分:0)

您可以以优化的方式使用env变量VCAP_SERVICE来匹配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****dce9a@192.155.243.15: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