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,因为它们已经认为您提供的值.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...