我开始使用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
知道出了什么问题吗?
答案 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
这需要你正在谈论的网址。