1

我开始使用 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

知道有什么问题吗?

4

3 回答 3

0

您正在寻找的是 MongoClient.connect 功能

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

它需要您正在谈论的网址。

于 2013-01-30T15:34:08.673 回答
0

您需要在打开数据库后进行身份验证。考虑它的方式是针对数据库而不是连接进行身份验证,因此您发现该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);
        });
    });
});
于 2013-01-30T06:37:35.913 回答
0

您的客户端/驱动程序想要连接的 URL 是“localhost”。我用变量mongoUrl替换它

var mongoClient = new MongoClient(new Server(mongoUrl, 27017));
于 2013-01-29T22:36:39.553 回答