【问题标题】:How to use mongo/mongoose to connect to a remote database如何使用 mongo/mongoose 连接远程数据库
【发布时间】:2015-11-09 16:59:52
【问题描述】:

我在 IP ex: 111.111.111.23:3000 中有一个节点 js 应用程序我想从我的本地 express/node 应用程序脚本连接到我的远程 mongodb 数据库。数据库在上面提到的 IP 中运行,但由于某种原因,我所能做的就是连接到我的本地 mongodb 数据库。

if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });

    mongoose.connect('mongodb://localhost/test');
}

上面的代码在我的 app.js 中,它可以工作,但我想做的是这样的。

if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });

    mongoose.connect('mongodb:111.111.111.23:27017/test');
}

我尝试添加带有和不带有端口的 ip,但它失败了。

我的问题是如何从本地计算机连接到远程数据库?

这就是帮助。远程服务器正在运行 ubuntu server 14.04,我使用本指南安装了 mongodb:https://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

我收到以下错误:

错误:连接 ECONNREFUSED 111.111.111.23:27017

【问题讨论】:

  • 您似乎缺少 IP 地址前的 // 前缀。
  • 我加了,还是不行。
  • 您的数据库是否受密码保护?您的服务器端口是否将外部请求转发到 :27017?
  • 你的服务器有防火墙吗?
  • 我的防火墙处于非活动状态。

标签: node.js mongodb express


【解决方案1】:

猫鼬连接格式为:

mongoose.connect('mongodb://username:password@host:port/database')

如果您没有用户名和密码,只需执行:

mongoose.connect('mongodb://host:port/database');

来源:http://mongoosejs.com/docs/connections.html

您也可以尝试使用 mongo 客户端进行连接,看看是否有效..

$ mongo 111.111.111.23:27017

另外,但不太可能,请确保您的 mongod 服务已启动。

$ sudo service mongod start

最后,请确保您的防火墙已关闭或使用以下命令打开端口:

$ iptables -A INPUT -p tcp --dport 27017 -j ACCEPT

【讨论】:

    【解决方案2】:

    这是我的代码,但仍然有错误: 错误:

    E:\nodeJs>node mongoDBApi.js
    
    E:\nodeJs\node_modules\mongodb\lib\mongo_client.js:792
              throw err;
              ^
    [object Object]
    

    代码:

    var MongoClient = require('mongodb').MongoClient;
    var url = 'mongodb://xxxx:xxxx@192.168.11.14:22/';
    
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("cdb");
      dbo.collection("ccollection").findOne({}, function(err, result) {
        if (err) throw err;
        console.info(result.name);
        db.close();
      });
    });
    

    【讨论】:

    • 如果我的密码包含@符号怎么办?
    • const PASSWORD = encodeURIComponent('hello@123'); @DeepakTerse 对包含特殊字符的密码进行编码
    猜你喜欢
    • 2017-03-20
    • 2016-05-14
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多