MongoTimeoutError: 服务器选择在 30000 毫秒后超时

Posted

技术标签:

【中文标题】MongoTimeoutError: 服务器选择在 30000 毫秒后超时【英文标题】: MongoTimeoutError: Server selection timed out after 30000 ms 【发布时间】:2020-04-02 01:19:11 【问题描述】:

我正在 Elementary OS 上制作一个库 nodejs 应用程序。我的 server.js:

if (process.env.NODE_ENV !== 'production') 
    require('dotenv').config();

........

const mongoose = require('mongoose')
mongoose.connect(process.env.DATABASE_URL, 
     useCreateIndex: true,
        useNewUrlParser: true,
        useUnifiedTopology: true, // commented out currently
    )
const db = mongoose.connection
db.on('error', error => console.error(error))
db.once('open', () => console.log('Connected to Mongoose'))


app.use('/', indexRouter)
app.use('/authors', authorRouter)
app.use('/books', bookRouter)


app.listen(process.env.PORT || 3000)

每次我跑 npm run devStart(我在 package.json 中有:“devStart”:“nodemon server.js”) 我明白了“

 MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout [as _onTimeout] (/media/dan/Alte date/aplicatii nodejs/nodejs_mongo_cc/node_modules/mongodb/lib/core/sdam/server_selection.js:308:9)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
  name: 'MongoTimeoutError',
  reason: 
    Error: connect ECONNREFUSED 127.0.0.1:27017
    at Object._errnoException (util.js:1022:11)
    at _exceptionWithHostPort (util.js:1044:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1198:14)
     name: 'MongoNetworkError',
     [Symbol(mongoErrorContextSymbol)]:  ,
  [Symbol(mongoErrorContextSymbol)]:  
(node:6287) UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout [as _onTimeout] (/media/dan/Alte date/aplicatii nodejs/nodejs_mongo_cc/node_modules/mongodb/lib/core/sdam/server_selection.js:308:9)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
(node:6287) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:6287) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

"

我安装了猫鼬。 可能是什么问题?

【问题讨论】:

检查mongo是否在运行.. 【参考方案1】:

如果 MongoDB 服务器未运行或 mongoDB URL 不正确,则会发生此错误。您的 mongoDB 是安装在本地还是在云上?另请使用 ROBO 3T 或指南针检查您的 mongo 连接。 -谢谢

【讨论】:

如何检查它是否正在运行? 有几种方法,但我建议使用 ROBO 3T。创建一个连接,然后按测试。如果 MongoDB 正在运行,则应该连接,但如果存在防火墙问题或 mongoDB 未运行,则不会建立连接。【参考方案2】:

您应该首先检查 MongoDB 是否正在运行?其次,如果不在localhost,在mongod.conf文件的bindIp选项中添加公网IP,然后重启mongodb服务器。

bindIp:[public_ip]

并确保输入正确的 mongoDB URL。

【讨论】:

以上是关于MongoTimeoutError: 服务器选择在 30000 毫秒后超时的主要内容,如果未能解决你的问题,请参考以下文章

我如何解决错误:MongoTimeoutError:服务器选择在30000毫秒后超时,无法连接到服务器127.0.0.1:27017

在选择云服务器时宽带该怎么选择?1M够用吗?

在选择云服务器时宽带该怎么选择?1M够用吗?

在选择阿里云服务器时候配置该怎么选择?

新手在选择云服务器时CPU核心数该怎么选择?

服务器硬件配置该如何进行选择?