通过 Mongoose (nodejs) 从远程服务器连接到 MongoDB

用户220790b

我在运行 MongoDB (4.0.3) 和 Ubuntu (18.04) 的 Digital Ocean 中有一个 Droplet。我用他们的一键编队创建了这个。我按照数字海洋教程来保护 mongodb配置远程访问如果我 ssh 进入盒子并使用 mongo shell,一切都会很好。但是,我无法通过 nodejs/mongoose 从我的笔记本电脑建立到服务器的连接。

你能帮我找出我的配置有什么问题吗?或者帮我解释错误信息

这是有效的:

  1. [终端] -ssh进入盒子并使用mongo外壳
  2. [node] - 使用tunnel-ssh我可以建立到远程服务器的连接
  3. [node] - 使用 npmmongodb包我可以创建到数据库的连接

但是,我无法与mongoose使用tunnel-ssh. 这是我正在尝试的代码:

const mongoose = require('mongoose')
const tunnel = require('tunnel-ssh');

const config = {
    username: 'user',
    password: 'pass',
    host: 'myLaptopIp',
    port: 22,

    dstHost: 'severRunningMongo',
    dstPort: 27017,     // this was open via `sudo ufw allow from myLaptopIp to any port 27017`

    localHost: '127.0.0.1',
    localPort: 27017
};

tunnel(config, (error, server) => {
  if (error) {
      console.log('SSH connection error: ' + error);
  }

  const url = 'mongodb://${dbuser}:${dbpass}@127.0.0.1:27017/${dbname}';
  mongoose.connect(url, { useNewUrlParser: true });
  

  var db = mongoose.connection;
  db.on('error', console.error.bind(console, 'DB connection error:'));
  db.once('open', function() {
      console.log('DB connection successful');
  });
});

我得到的错误是

Error: connect ECONNREFUSED myLaptopIp:22
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1137:16)
Emitted 'error' event on Server instance at:
    at Client.emit (events.js:311:20)
    at Socket.<anonymous> (/~/node_modules/ssh2/lib/client.js:294:10)
    at Socket.emit (events.js:311:20)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: 'myLaptopIp',
  port: 22,
  level: 'client-socket'
}

如果我更改localPort2000OR 如果我更改 mongo 连接 url 以包含 mongoServerIp,则会出现错误:

MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1137:16) {
  name: 'MongoNetworkError'
用户220790b

你知道当你提出一个问题,然后 1 分钟后你会想到一些新的尝试,而那个新的东西完全有效吗?

我想我根本不需要使用tunnel-ssh,因为我已经打开了服务器以允许从我的笔记本电脑进行远程访问。这对我有用

const mongoose = require('mongoose')
const url = 'mongodb://{dbUser}:{dbPass}@{mongoServerIp}:27017/{dbName}?authSource=admin';
mongoose.connect(url);
  
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function() {
    console.log('DB connection successful');
  });

我确实需要将?authSource=admin加到 url 的末尾,否则它不起作用。我按照 DO 教程中的建议将我的 dbuser 添加到了 admin db

我仍然不确定为什么隧道不起作用,我原以为它仍然有效?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法连接到远程mongodb服务器

通过节点服务器连接到MongoDB的警告

Python-使用pyodbc通过Excel数据连接中的信息连接到远程服务器

使用Ionic连接到MongoDB远程服务器

Mongoose的Mongodb安全服务器设置

mongoose和nodejs的mongodb连接超时错误

MongoDB在docker-compose环境中通过mongoose与nodeJs的连接

无法连接到远程mongodb服务器

使用NodeJS和Mongoose在MongoDB中打开了多个连接

使用Tunnel-ssh通过ssh通过nodeJS中的mongoose通过SSH连接到远程服务器mongoDB

连接到远程mongoDB服务器

如何使用带有证书文件的MongoDB.Driver通过TLS连接到服务器?

NodeJS无法连接到服务器ECONNREFUSED上的MongoDB

如何通过SSH连接通过远程服务器连接到Internet

Java mongodb连接到远程服务器

如何通过R连接到远程服务器?

动态数据库连接到NodeJS的mongodb或mongoose

以响应方式将后端(通过Node.js中Express服务器上的Mongoose通过MongoDB链接到MongoDB)以响应方式链接到前端(Bootstrap或Foundation)?

连接已关闭:多个节点应用程序使用Mongoose连接到同一MongoDB服务器

从Windows通过X服务器远程连接到RHEL

使用JAVA通过FTP连接到远程服务器

mLab MongoDB 连接总是通过 NodeJS 超时

通过 mongoose 连接到 mongodb 有困难

使用 net nodejs 模块通过单击按钮连接到套接字服务器

Nodejs连接到mongoose在服务器(ubuntu)上失败,但在本地工作

无法通过 app.js 连接到本地 MongoDB 服务器

如何通过 swi prolog 连接到 MongoDB 服务器?

使用 Mongoose 的带有 NodeJS 的 MongoDB Atlas 未连接

Sublime Text 3 SFTP 通过 SFTP 连接到远程服务器时立即“连接超时”