我开始学习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}`);
});
答案 0 :(得分:2)
我遇到了类似的问题, 请删除useUnifiedTopology:true或使其为false,这可以解决您的问题。我不知道为什么,但这解决了我的问题。
答案 1 :(得分:0)
您是否已在本地正确安装mongoDB?
https://docs.mongodb.com/manual/administration/install-community/
答案 2 :(得分:0)
验证系统环境变量的内容,在新的控制台窗口中键入命令“ echo%ATLAS_URI%”,如果URI没有出现,则必须添加它:
如果已经添加了它,则必须重新启动计算机,然后尝试使用“ echo%ATLAS_URI%” 命令。