微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js使用Mongoose对MongoDB进行SSH隧道连接

我有两个Mongo DB.一个用于我的开发环境,一个用于生产,如我在Robomongo设置中所见:

Two Mongo DBs

生产数据库通过SSH隧道连接到我的数字海洋虚拟服务器,如此处所示(具体情况已经明显改变).连接到我的生产网站/从我的生产网站连接时此设置正常:

SSH Tunnel Settings

我现在正在开发一个不同/相关的项目,需要将我的本地机器连接到我的生产数据库,所以我认为我需要使用像tunnel-ssh这样的东西来完成它.我已经按照this answer作为示例,但我要么得到错误:(SSH)通道打开失败:打开失败或者它连接到我的Dev db(当我使用27017作为我的dstHost / dstPort / localPort时).我一定在考虑这个错误,或者我对我的配置感到愚蠢.我是公认的Mongo / Mongoose新手,所以两者都是可能的.有什么建议?

var fs = require("fs");
var mongoose = require('mongoose');
var tunnel = require('tunnel-ssh');

//===== db connection =====

var config = {
    username:'my.username',host:'my.ip.address',agent : process.env.SSH_AUTH_SOCK,privateKey:require('fs').readFileSync('/Users/myusername/.ssh/id_rsa'),port:22,dstHost:'mongodb://localhost:27000/mydbname',dstPort:27000,localHost:'127.0.0.1',password:'mypassword',localPort: 27000
};

var server = tunnel(config,function (error,server) {
    if(error){
        console.log("SSH connection error: " + error);
    }
    mongoose.connect('mongodb://localhost:27000/mydbname');

    var db = mongoose.connection;
    db.on('error',console.error.bind(console,'DB connection error:'));
    db.once('open',function() {
        // we're connected!
        console.log("DB connection successful");
        // console.log(server);
    });
});

提前致谢!

解决方法

dstHost需要是主机名/ IP,而不是MongoDB连接字符串.在这种特殊情况下,您可以在这种特殊情况下省略dstHost,localHost和localPort,因为它们已经认为您提供的值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐