【问题标题】:How to get mongodb working on appfog?如何让mongodb在appfog上工作?
【发布时间】:2013-02-21 05:38:12
【问题描述】:

我是 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 的一个应用程序时,它不显示行,它只是在“开始”处停止,没有其他内容显示。

请帮忙,非常感谢。

【问题讨论】:

  • 检查err返回的内容怎么样?
  • 我相信您的 MongoDB 在不同的端口上运行(可能在 27017)。你检查过吗?
  • process.env.VMC_APP_PORT -> 我已经在这里指定了端口,我也尝试打印完整的 URL,看起来还不错。
  • 我也在 nodejitsu 中上传了相同的应用程序,它在那里工作正常,我错过了什么吗?
  • 我再次检查它是否返回任何错误,并且没有。

标签: node.js mongodb appfog


【解决方案1】:

您可以查看Documentgithub 上的示例。 他们为您需要连接的每个详细信息提供 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);

【讨论】:

  • 当你提供 appfog 提供的服务的 mongo url 时它确实有效,但当你尝试提供任何 3rd 方 url 时它不起作用,例如 mongohq 或 mongolab
猜你喜欢
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多