node.js应用程序 - 在appfog中集成mongodb

时间:2013-01-29 22:32:24

标签: node.js mongodb appfog

我开始使用appfog服务来托管节点应用程序。 我在尝试在我的应用程序中使用mongodb时遇到了麻烦。 在你的教程中:https://docs.appfog.com/services/mongodb#walkthrough它被编写为连接mongodb,如下所示:

require('mongodb').connect(mongourl, ...

虽然mogourl是generate_mongo_url函数生成的url。 问题是我正在使用更新的api(我认为)并且我无法将url传递给open方法。这就是我使用mongodb的方式:

var mongoClient = new MongoClient(new Server('localhost', 27017));
mongoClient.open(function(err, mongoClient) { ...

我在哪里以及如何使用生成的mongourl?如何传递generate_mongo_url函数中使用的凭证和mongo变量?

更新
根据@mjhm的建议,这是我的开放功能:

var mongoService = null;
if(process.env.VCAP_SERVICES){
    var env = JSON.parse(process.env.VCAP_SERVICES);
    mongoService = env["mongodb-1.8"][0]["credentials"];
} else {
    mongoService = {
        "hostname": "localhost",
        "port": 27017,
        "isLocal": true,
        "username": "",
        "password": "",
        "name": ""
    };
}

this.mongoClient.open(function(err, mongoClient) {
    if (!err) {
        console.log("Open DB Success");
        var db = mongoClient.db(DB_NAME);

        if (!mongoService.isLocal) {
            db.authenticate(mongoService.username,
                mongoService.password, function (err, result) {
                    if (!err) {
                        console.log("Authenticate DB Success");
                        doAction();
                    } else {
                        console.log("Authenticate DB Error: " + err);
                    }
            });
        } else {
            doAction();
        }
    } else {
        console.log("Open DB Error: " + err);
    }
});

当我在appfog上运行此代码时,我正在等待很多时间(超过20秒)然后我得到:

$ curl myappname.eu01.aws.af.cm/list
curl: (52) Empty reply from server

知道出了什么问题吗?

3 个答案:

答案 0 :(得分:0)

您的客户端/驱动程序要连接的URL是“localhost”。我换了一个 变量 mongoUrl

var mongoClient = new MongoClient(new Server(mongoUrl, 27017));

答案 1 :(得分:0)

打开数据库后需要authenticate。想到它的方法是认证是针对数据库而不是连接进行的,因此您发现generate_mongo_url函数不是很有用。

例如:

var mongoClient = new MongoClient(new Server('localhost', 27017));

mongoClient.open(function(err, mongoClient) {
    var db = mongoClient.db('test');
    db.authenticate('me', 'mypwd', function (err, result) {
        var coll = db.collection('query_example3');
        coll.find().toArray(function(err, result) {
            console.log(result);
            process.exit(0);
        });
    });
});

答案 2 :(得分:0)

您正在寻找的是MongoClient.connect函数

http://mongodb.github.com/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect

这需要你正在谈论的网址。