从终端查询MongoDB的数据库:[MongoError]:无法连接到服务器

问题描述 投票:0回答:1

我有一个Web应用程序和一个MongoDB数据库。现在,我只想编写脚本以从终端查询数据库。我已经编写了以下代码。

const userModel = require('../models/Users');
const mongoose = require('mongoose');
const CONN = 'mongodb://tie:<password>@178.62.87.72:27017/news'
const option = {
  socketTimeoutMS: 30000,
  keepAlive: true,
  reconnectTries: 30000,
  // useNewUrlParser: true
};
mongoose.connect(CONN, option);
mongoose.connection.on('connected', async function () {
  console.log('Database connected: ' + CONN);
  try {
    let x = await userModel.user.find({ "_id": "5a95bbc0763e1f4bad37b864" }).lean()
    console.log(x)

    mongoose.connection.close()
    console.log("done");
  } catch (error) {
    console.log(error);
  }
});
mongoose.connection.on('disconnected', function () {
  console.log('Database disconnected:' + CONN);
});

然后,终端中的node kpi.js返回错误:

events.js:200
      throw er; // Unhandled 'error' event
      ^
Error [MongoError]: failed to connect to server [178.62.87.72:27017] on first connect [Error: connect ECONNREFUSED 178.62.87.72:27017
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) {
  name: 'MongoError',
  message: 'connect ECONNREFUSED 178.62.87.72:27017'
}]
    at Pool.<anonymous> (/Users/chengtie/Startup/PRODSERVER/From202005/funfun/node_modules/mongodb-core/lib/topologies/server.js:336:35)
    at Pool.emit (events.js:223:5)
    at Connection.<anonymous> (/Users/chengtie/Startup/PRODSERVER/From202005/funfun/node_modules/mongodb-core/lib/connection/pool.js:280:12)
    at Object.onceWrapper (events.js:313:26)
    at Connection.emit (events.js:223:5)
    at Socket.<anonymous> (/Users/chengtie/Startup/PRODSERVER/From202005/funfun/node_modules/mongodb-core/lib/connection/connection.js:189:49)
    at Object.onceWrapper (events.js:313:26)
    at Socket.emit (events.js:223:5)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:81:21)
Emitted 'error' event on NativeConnection instance at:
    at Immediate.<anonymous> (/Users/chengtie/Startup/PRODSERVER/From202005/funfun/node_modules/mongoose/lib/connection.js:325:19)
    at processImmediate (internal/timers.js:439:21) {
  name: 'MongoError',
  message: 'failed to connect to server [178.62.87.72:27017] on first connect [Error: connect ECONNREFUSED 178.62.87.72:27017\n' +
    '    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) {\n' +
    "  name: 'MongoError',\n" +
    "  message: 'connect ECONNREFUSED 178.62.87.72:27017'\n" +
    '}]'
}

有人知道如何解决吗?我是否需要使用例如MongoClient?

PS:我可以使用以下设置通过Robo 3T查询数据库:

enter image description hereenter image description hereenter image description here

node.js mongodb mongoose
1个回答
0
投票

您的代码看起来不错,我们还从服务器ECONNREFUSED收到响应,或者英文连接被拒绝。这可能是由几种不同的原因引起的。最常见的是防火墙/ IP问题(在您使用robo3T进行连接时,情况并非如此)。

[如果您仔细观察发布的第二张图像,则可以在ssh选项卡上看到一个标记为Use SSH Tunnel的框。这就是您无法通过代码连接的地方。

打开一个新的终端选项卡并运行类似这样的内容:

ssh [email protected] -L [LOCAL_PORT]:localhost:27017

LOCAL_PORT可以是本地主机上的任何开放端口。这将创建一个开放的“隧道”,即您的计算机和远程计算机。这就是Mongo与您交流的方式。

然后将您的连接代码更改为此:

const CONN = 'mongodb://tie:<password>@178.62.87.72:LOCAL_PORT/news'

您可以继续使用27017作为LOCAL_PORT,但通常人们在该端口上有正在运行的本地Mongo进程。

© www.soinside.com 2019 - 2024. All rights reserved.