我在 Atlas MongoDB Cloud 集群上托管了一个 mongodb 数据库。我目前正在使用 mongoose 访问我的 node.js 应用程序中的数据库:
mongoose.connect("mongodb://user:pw@cluster0-shard-00-00-***.mongodb.net:***,cluster0-shard-00-01-***.mongodb.net:***,cluster0-shard-00-02-***.mongodb.net:***/admin?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin");
Run Code Online (Sandbox Code Playgroud)
因为 Atlas MongoDB Cloud 有一个白名单,而 Heroku 不提供为我的应用程序获取固定 IP 地址的可能性,所以我使用Fixie 附加组件。基本上,Fixie 充当出站流量的代理。
这样,我可以通过 HTTP 请求资源,这些资源通过 Fixie 提供的固定 IP 地址进行隧道传输。但我需要的是使用 Fixie 的代理连接到 Atlas Cloud 集群,以便从数据库中检索和修改数据。
可以用猫鼬来完成吗?
该mongoose.connect函数接受一个选项参数,但我找不到关于通过代理建立连接的任何选项。
我有两个Mongo DB.一个用于我的开发环境,一个用于生产,如我在Robomongo设置中所见:
生产数据库通过SSH隧道连接到我的数字海洋虚拟服务器,如此处所示(具体情况已经明显改变).连接到我的生产网站/从我的生产网站连接时此设置正常:
我现在正在开发一个不同/相关的项目,需要将我的本地机器连接到我的生产数据库,所以我假设我需要使用像tunnel-ssh这样的东西来完成它.我已经按照这个答案作为例子,但是我要么正在Error: (SSH) Channel open failure: open failed连接到我的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 …Run Code Online (Sandbox Code Playgroud) 我的凭据与 Robomongo 完美配合,但我无法与 node.js 建立连接
我曾尝试使用 ssh2 和 tunnel-ssh npm 模块建立连接,但两次都失败了。
- mongo 连接不需要密码
- ssh 连接是使用 pem 密钥建立的
这是我在 ssh2 模块中使用的代码,我可以正确建立隧道,但 mongo 连接失败
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
//mongo connection
mongoose.connect('mongodb://localhost:27000/');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("database connection established");
var users = db.collection('user');
var getallUsers = function (date, callback){
users.find({}).toArray(function(err,data){
callback(data);
})
};
getallUsers(null, function (data){
console.log('data :'+ data);
});
});
//end of …Run Code Online (Sandbox Code Playgroud)