无法使用猫鼬连接到MongDB地图集

时间:2019-10-26 05:18:54

标签: node.js mongodb express mern

我开始学习MERN堆栈教程。我最初创建了一个React应用,添加了一个名为backend的目录,安装了express,cors,express和dotenv,然后创建了server.js并添加了一些代码,但是在连接到mongodb Atlas之后,出现以下错误:

  

(节点:5828)UnhandledPromiseRejectionWarning:MongoTimeoutError:   服务器选择在30000毫秒后超时       在超时。 (C:\ Users \ Lenovo \ Desktop \ REACTion \ mernapp \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ topology.js:878:9)       在listOnTimeout(internal / timers.js:531:17)       在processTimers(internal / timers.js:475:7)(node:5828)处UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个   由抛出异步函数引起的错误   没有障碍,或者拒绝了没有处理的承诺   使用.catch()。 (拒绝ID:1)(节点:5828)[DEP0018]   DeprecationWarning:已弃用未处理的承诺拒绝。在   未来,未处理的承诺拒绝将终止   使用非零退出代码的Node.js进程。 [nodemon]由于重启   更改... [nodemon]正在启动node server.js服务器正在运行   端口:5000连接失败! MongoTimeoutError:服务器选择   30000毫秒后超时       在超时。 (C:\ Users \ Lenovo \ Desktop \ REACTion \ mernapp \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ topology.js:878:9)       在listOnTimeout(internal / timers.js:531:17)       在processTimers(internal / timers.js:475:7)处{名称:'MongoTimeoutError',原因:MongoNetworkError:连接2至   cluster0-shard-00-01-l6mnq.gcp.mongodb.net:27017已关闭         在TLSSocket。 (C:\ Users \ Lenovo \ Desktop \ REACTion \ mernapp \ backend \ node_modules \ mongodb \ lib \ core \ connection \ connection.js:356:9)         在Object.onceWrapper(events.js:288:20)         在TLSSocket.emit(events.js:200:13)         在net.js:586:12         在TCP.done(_tls_wrap.js:479:7){       名称:“ MongoNetworkError”,       errorLabels:['TransientTransactionError'],       [Symbol(mongoErrorContextSymbol)]:{}},[Symbol(mongoErrorContextSymbol)]:{}}

下面是我的server.js文件代码。我从MongoDB地图集复制了uri并将其粘贴到.env文件中。

const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config();

const app = express();
const port = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());

const uri = process.env.ATLAS_URI;
mongoose
  .connect(uri, { useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true })
  .then(() => {
    console.log('Connected to database!');
  })
  .catch(error => {
    console.log('Connection failed!');
    console.log(error);
  });

const connection = mongoose.connection;
connection.once('open', () => {
  console.log('MongoDB database connection established successfully');
});

app.listen(port, () => {
  console.log(`Server is running on port: ${port}`);
});

3 个答案:

答案 0 :(得分:2)

我遇到了类似的问题, 请删除useUnifiedTopology:true或使其为false,这可以解决您的问题。我不知道为什么,但这解决了我的问题。

答案 1 :(得分:0)

您是否已在本地正确安装mongoDB?

https://docs.mongodb.com/manual/administration/install-community/

答案 2 :(得分:0)

验证系统环境变量的内容,在新的控制台窗口中键入命令“ echo%ATLAS_URI%”,如果URI没有出现,则必须添加它:

  1. 在“搜索”中,搜索,然后选择:系统(控制面板)。
  2. 点击高级系统设置链接。
  3. 点击环境变量。在系统变量部分中,找到PATH环境变量并选择它。单击编辑。如果PATH环境变量不存在,请单击“新建”。
  4. 编辑系统变量(或新系统变量)窗口中,指定PATH环境变量的值。单击确定。通过单击确定关闭所有剩余的窗口。

如果已经添加了它,则必须重新启动计算机,然后尝试使用“ echo%ATLAS_URI%” 命令。