2013-02-21 96 views
0

我是新來的nodeJS,所以我只是嘗試從基礎開始的幾件事情。如何讓mongodb在appfog上工作?

我有一個問題,同時從MongoDB中檢索數據,所以這裏是代碼:

var port = (process.env.VMC_APP_PORT || 3000); 
var host = (process.env.VCAP_APP_HOST || 'localhost'); 
var http = require('http'); 
var mongo = require('mongodb'); 
http.createServer(function (req, res) { 
    var mongoUrl = "mongodb://<userid>:<password>@linus.mongohq.com:10090/<db>"; 
    if (process.env.VCAP_SERVICES) { 
     mongoUrl = process.env.MONGOHQ_URL; 
    } 
    selectTable(req, res, mongoUrl); 
}).listen(port, host); 

var selectTable = function (req, res, mongoUrl) { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write("Start\n"); 
    mongo.connect(mongoUrl, function (err, conn) { 
     conn.collection('Test', function (err, coll) { 
      coll.find({}, {}, function (err, cursor) { 
       cursor.toArray(function (err, items) { 
        for (i = 0; i < items.length; i++) { 
         res.write(JSON.stringify(items[i]) + "\n"); 
        } 
        res.end(); 
       }); 
      }); 
     }); 
    }); 
} 

這部作品在我的地方不錯,它顯示的行,但是當我把它上傳到我的appfog的應用程序之一它不顯示行,它只是停在「開始」處,沒有其他顯示。

請幫忙,非常感謝。

+0

如何檢查'err'中返回的內容? – 2013-02-21 05:43:59

+0

我相信你的MongoDB運行在不同的端口上(可能在27017年)。你檢查過了嗎? – 2013-02-21 06:56:14

+0

process.env.VMC_APP_PORT - >我已經在這裏指定端口,並且我試圖打印完整的URL,看起來很好。 – peek4y 2013-02-21 07:48:52

回答

0

您可以使用Documentgithub上的示例進行檢查。 他們提供VCAP_SERVICES爲您需要連接的每個細節。 以下(來自doc)會做所有的魔法。

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":27017, 
"username":"", 
"password":"", 
"name":"", 
"db":"db" 
} 
} 
var generate_mongo_url = function(obj){ 
obj.hostname = (obj.hostname || 'localhost'); 
obj.port = (obj.port || 27017); 
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); 
+1

當你給予appfog提供的服務的mongo url時它可以工作,但當你嘗試提供任何第三方url時,如mongohq或mongolab,它不起作用 – peek4y 2013-02-25 11:11:08