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

クライアント/ドライバーが接続したいURLは「localhost」でした。変数mongoUrlに置き換えました

var mongoClient = new MongoClient(new Server(mongoUrl, 27017));
于 2013-01-29T22:36:39.553 に答える
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

あなたが探しているのはMongoClient.connect関数です

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

それはあなたが話しているURLを取ります。

于 2013-01-30T15:34:08.673 に答える