2014-02-16 152 views
0

db初学者试图让mongodb和nodejs在云上相互交谈。节点js连接到mongo db

我在app-fog上托管了一个应用程序,但即使当我尝试做最基本的查询时,我也失败了。这是推送到云端的app.js文件的内容。我相信我已经安装了所有必要的依赖(NPM安装MongoDB的& &表达& & BSON & & shrinkwarp),但它是可能的,我已经在一路的失败,即使我在整个过程中去了两次。

var port = (process.env.VMC_APP_PORT || 3000); 
var host = (process.env.VCAP_APP_HOST || 'localhost'); 
var http = require('http'); 


if(process.env.VCAP_SERVICES){ 
     var env = JSON.parse(process.env.VCAP_SERVICES); 
     var mongo = env['mongodb-1.8'][0]['credentials']; 
    } else { 
    var mongo = { 
     "hostname":"localhost", 
     "port":3000, 
     "username":"", 
     "password":"", 
     "name":"", 
     "db":"db" 
    } 
} 
var generate_mongo_url = function(obj){ 
    obj.hostname = (obj.hostname || 'localhost'); 
    obj.port = (obj.port || 3000); 
    obj.db = (obj.db || 'test'); 
    if(obj.username && obj.password){ 
     return "mongodb://" + obj.username + ":" + obj.password + "@" + obj.hostname + ":" + obj.port + "/" + obj.db; 
    }else{ 
     return "mongodb://" + obj.hostname + ":" + obj.port + "/" + obj.db; 
     } 
    } 
var mongourl = generate_mongo_url(mongo); 



var record_visit = function(req, res){ 
/* Connect to the DB and auth */ 
    require('mongodb').connect(mongourl, function(err, conn){ 
     if(err){ 
      console.log(">>",err); 
     } 
     conn.collection('ips', function(err, coll){ 
      /* Simple object to insert: ip address and date */ 
      object_to_insert = { 'ip': req.connection.remoteAddress, 'ts': new Date() }; 
      /* Insert the object then print in response */ 
      /* Note the _id has been created */ 
      coll.insert(object_to_insert, {safe:true}, function(err){ 
      res.writeHead(200, {'Content-Type': 'text/plain'}); 
      res.write(JSON.stringify(object_to_insert)); 
      res.end('\n'); 
      }); 
     }); 
    }); 
} 

http.createServer(function(res,req){ 
    record_visit(req,res); 
    require('mongodb').connect(mongourl,function(err,conn){ 
     console.log(conn+"\n\n"); 
    }); 
    console.log('Hello from us.\n'); 

})。listen(process.env.VCAP_APP_PORT || 3000);

现在我好像总是出现此错误:

node_modules/mongodb/lib/mongodb/mongo_client.js:378 
      throw err 
       ^
TypeError: Cannot call method 'collection' of null 

这个问题似乎不只是收藏,但主要与其父,conn,我想打印出来,但没有成功。 (我很怀疑它本身是不确定的。)

我知道这可能是一个简单的,RTFM类型的错误,但所有这些概念都在我的头上。

谢谢! BTW

require('mongodb').connect(mongourl, function(err, conn){ 
    if(err) { 
     console.log(err); // <-- here 
     ... 
    } 
    conn.collection('ips', function(err, coll){ 

回答

0

你会很容易,如果你登录的connecterr发现你的错误你无论如何应该始终在继续使用回调的第二个参数之前检查err

+0

谢谢!所以,现在当我尝试在本地运行时收到“[Error:connection closed]”。但这不是主要问题,因为我尝试主要将其设置在云中。更令我担心的是,当我将其推送到App-Fog时,它仍然不起作用。 来自app的日志如下: 跳过npm支持:不提供npm-shrinkwrap.json 使用纯JS版本加载C++ bson扩展失败 Cloud Foundry的自动配置失败。错误消息:path.join的参数必须是字符串。 我想知道:我应该联系他们的支持吗? –

+0

可能是一个选项。 – heinob