【问题标题】:how to connect MongoDB in Cloud9?Cloud9如何连接MongoDB?
【发布时间】:2013-01-21 08:49:57
【问题描述】:

Cloud9 中的连接数据库 MongoDB 有问题 请帮忙解决这个问题!

var MongoClient = require("mongodb").MongoClient;
var port = process.env.PORT;
var ip   = process.env.IP;
MongoClient.connect("mongodb://"+ip+":"+port+"/test",function(error,db){
        if(!error){
         console.log("We are connected");   
        }
        else{
         console.dir(error); //failed to connect to [127.4.68.129:8080]               
        }
});

输出:

Running Node Process
Your code is running at 'http://demo-project.alfared1991.c9.io'.
Important: use 'process.env.PORT' as the port and 'process.env.IP' as the host in your scripts!
[Error: failed to connect to [127.4.68.129:8080]]

【问题讨论】:

  • 我认为@alfared 是在询问如何连接到 Cloud9 中的本地 mongodb 实例,但没有得到正确回答。我尝试修改问题,但修改未获批准。

标签: node.js mongodb cloud9-ide


【解决方案1】:

如果你关注https://docs.c9.io/setting_up_mongodb.html这个链接,你将在你的工作空间下设置和运行你的mongodb守护进程。

如果你看一下./mongod 的输出,你会发现这个输出:

2015-08-22T12:46:47.120+0000 [initandlisten] MongoDB starting : pid=7699 port=27017 dbpath=data 64-bit host=velvetdeth-express-example-1804858

只需将主机和端口值复制到您的mongodb配置中,设置数据库url,在这种情况下是:

mongodb://velvetdeth-express-example-1804858:27017

【讨论】:

  • 对我来说,使用猫鼬,这行得通,但我必须添加数据库名称:mongodb://velvetdeth-express-example-1804858:27017/mydata
【解决方案2】:

process.env.PORTprocess.env.IP 是您的应用程序的端口和 IP 地址,而不是您的数据库。您需要从 MongoDB 提供程序中提取 Mongo 连接字符串。

下面是 Node.js homepage 中的 hello world 示例,修改为使用两个环境变量。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(process.env.PORT || 1337, process.env.IP || '127.0.0.1');

【讨论】:

  • 还有一些具体的例子吗?我的意思是,我首先需要创建/运行一个 Web 服务器?我不明白
【解决方案3】:

对于遇到此问题的其他人,解决方案在这里:https://docs.c9.io/setting_up_mongodb.html

MongoDB 预安装在 Cloud9 工作区中。运行这个:

$ mkdir data
$ echo 'mongod --bind_ip=$IP --dbpath=data --nojournal --rest "$@"' > mongod
$ chmod a+x mongod

要启动 Mongodb 进程,运行:

$ ./mongod

然后“运行”你的 node.js 应用脚本,你就可以参加比赛了。

以下是参数的含义:

--dbpath=data(因为它默认为 /var/db 不可访问)

--nojournal 因为 mongodb 通常会预先分配 2GB 的日志文件(超过 Cloud9 磁盘空间配额)

--bind_ip=$IP(因为不能绑定到0.0.0.0)

--rest 在默认端口 28017 上运行

【讨论】:

  • 你知道你会使用什么连接字符串来访问cloud9中的数据库吗? mongodb://localhost/dbname 在那里不起作用,我尝试了 'mongodb://' + process.env.IP + '/dbname',也没有成功。
  • 我相信我使用了猫鼬和命令行。我不知道你可以远程访问cloud9之外的数据库。否则,据我所知,您应该只使用“本地主机”。抱歉,我删除了这个项目,所以手头没有代码。
  • 感谢您的回答!我想在应用程序中使用它,但是 mongodb://localhost/dbname 不起作用。
  • @LucasReis 我实际上在 Bitbucket 上找到了我的源存档,并且我使用的是 MEAN 堆栈。除了我上面提到的 ./mongod 文件之外,我的 express.js 中还有:'var mongoStore = require('connect-mongo')(session)' 然后在文件的后面, // Express/Mongo session storage app.use(session({ secret: config.sessionSecret, store: new mongoStore({ db: db.connection.db, collection: config.sessionCollection }), cookie: config.sessionCookie, name: config.sessionName, resave:真,保存未初始化:真}));' - 希望有帮助!
  • 非常感谢@James Gentes!我会尽快尝试比较配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多