【问题标题】:How can I connect my mongodb with the NODEjs app on Bluemix?如何将我的 mongodb 与 Bluemix 上的 NODEjs 应用程序连接起来?
【发布时间】:2014-11-05 01:23:34
【问题描述】:

我已经为 VCAP_SERVICES 尝试了以下代码:

if (process.env.VCAP_SERVICES) {
      var env = JSON.parse(process.env.VCAP_SERVICES);
      if (env['mongodb-2.2']) {
        var mongo = env['mongodb-2.2'][0]['credentials'];
      }
    } else {
           var mongo = {
              "username" : "user1",
              "password" : "secret",
              "url" : "mongodb://user1:secret@localhost:27017/test"
     }
}

//With this as the connector
var MongoClient = mongodb.MongoClient;
var db= MongoClient.connect(mongo.url, function(err, db) {
  if(err) {
    console.log("failed to connect to the database");
  } else {
    console.log("connected to database");
  }

但它一直抛出“ TypeError : Cannot read property "url" of underfined "

我尝试过使用和尚作为连接器:

var monk = require('monk');
 var db = monk(mongo.url);

这也会引发同样的错误。我可能错误地使用了对象 mongo。

【问题讨论】:

  • 你使用的是哪个版本的 mongo,确定是 2.2 吗?
  • var mongo 超出范围。

标签: node.js mongodb ibm-cloud monk nosql


【解决方案1】:

请查看我在博客中使用 mongoDB 和 Bluemix 发表的文章。在上面的代码中没有定义 mongo。您可以将其向上移动或删除“var”。这应该使它可以被其他代码块访问

http://gigadom.wordpress.com/2014/07/27/a-bluemix-recipe-with-mongodb-and-node-js/ http://gigadom.wordpress.com/2014/08/07/spicing-up-a-ibm-bluemix-cloud-app-with-mongodb-and-nodeexpress/

问候 象头神

【讨论】:

  • 谢谢,我忘记将 mongodb 绑定为使用 cf 的服务。我关注了您提到的第一个博客,现在我对 bluemix 应用程序感到满意:D
  • 我也遇到了一些关于 cf 环境变量的问题,因为现在的结构与 bluemix 中的教程不同。当然,在控制台上查看 env 变量肯定会节省大量调试时间。
【解决方案2】:

缺少两件事。

  1. mongourl 未定义。

2.mongodb版本不用提,可以如下优化代码

console.log('VCAP SERVICES: ' + JSON.stringify(process.env.VCAP_SERVICES, null, 4));

var mongoUrl;

if(process.env.VCAP_SERVICES) {

var vcapServices = JSON.parse(process.env.VCAP_SERVICES);

for (var svcName in vcapServices) {

if (svcName.match(/^mongo.*/)) {  --->this part will take care of mongodb version

      mongoUrl = vcapServices[svcName][0].credentials.uri;

      mongoUrl = mongoUrl || vcapServices[svcName][0].credentials.url;

      break;

    }

  }

} else {

       mongoUrl = "localhost:28001/alpha";   

      }

【讨论】:

    【解决方案3】:

    app.js:

    console.log('VCAP SERVICES: ' + JSON.stringify(process.env.VCAP_SERVICES, null, 4));

    var mongoUrl;

    if(process.env.VCAP_SERVICES) {

    var vcapServices = JSON.parse(process.env.VCAP_SERVICES);

    for (var svcName in vcapServices) {

    if (svcName.match(/^mongo.*/)) {
    
      mongoUrl = vcapServices[svcName][0].credentials.uri;
    
      mongoUrl = mongoUrl || vcapServices[svcName][0].credentials.url;
    
      break;
    
    }
    

    }

    }

    否则 {

    mongoUrl = "localhost:27017/SScheduler";

    }

    // 数据库

    var mongo = require('mongoskin');

    var db = mongo.db(mongoUrl, {native_parser:true});

    //var db = mongo.db("mongodb://localhost:27017/nodetest2", {native_parser:true});-->本地

    像这样尝试,您无需明确提及任何凭据详细信息。

    【讨论】:

      【解决方案4】:

      看起来 mongo.url 没有定义,尝试像下面这样重构你的代码。

      var mongo = {};
      
      if (process.env.VCAP_SERVICES) {
          var env = JSON.parse(process.env.VCAP_SERVICES);
          if (env['mongodb-2.2']) {
              mongo['url'] = env['mongodb-2.2'][0]['credentials']['uri'];
          }
          } else {
                 var mongo = {
                    "username" : "user1",
                    "password" : "secret",
                    "url" : "mongodb://user1:secret@localhost:27017/test"
           }
      }
      
      //With this as the connector
      var MongoClient = mongodb.MongoClient;
      var db = MongoClient.connect(mongo.url, function(err, db) {
      if(err) {
          console.log("failed to connect to the database");
      } else {
          console.log("connected to database");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多