Как заставить mongodb работать с appfog?

Я новичок в nodeJS, поэтому я просто пробовал пару вещей, начиная с основ.

У меня возникла проблема при извлечении данных из 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, оно не отображает строки, оно просто останавливается на «Пуск», и больше ничего не отображается.

Пожалуйста, помогите, большое спасибо заранее.


person peek4y    schedule 21.02.2013    source источник
comment
Как насчет проверки того, что возвращается в err?   -  person Joachim Isaksson    schedule 21.02.2013
comment
Я считаю, что ваша MongoDB работает на другом порту (может быть, 27017). Вы проверили это?   -  person HILARUDEEN S ALLAUDEEN    schedule 21.02.2013
comment
process.env.VMC_APP_PORT -> я уже указываю порт здесь, а также я попытался напечатать полный URL-адрес, кажется, все в порядке.   -  person peek4y    schedule 21.02.2013
comment
Также я загрузил это же приложение в nodejitsu, оно там работает нормально, я что-то пропустил?   -  person peek4y    schedule 21.02.2013
comment
Я снова проверил, возвращает ли он какую-либо ошибку, и ее нет.   -  person peek4y    schedule 21.02.2013


Ответы (1)


Вы можете проверить это в Документе или в примере на github. Они предоставляют VCAP_SERVICES для каждой детали, необходимой для подключения. поэтому следующее (из документа) сделает всю магию.

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);
person Bigfish    schedule 22.02.2013
comment
Это работает, когда вы указываете URL-адрес монго службы, предоставляемой appfog, но не работает, когда вы пытаетесь указать любой сторонний URL-адрес, например mongohq или mongolab. - person peek4y; 25.02.2013