2014-02-16 153 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