我正在尝试创建一个完整的应用程序,阅读以下教程:
我遵循了所有步骤,然后尝试运行:
node server.js
但是我遇到了以下错误:
MongoDB连接错误:MongoTimeoutError:服务器选择定时 30000毫秒后熄灭 在超时._onTimeout(C:\ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js:308:9) 在listOnTimeout(internal / timers.js:531:17) 在processTimers上(internal / timers.js:475:7){名称:'MongoTimeoutError',原因:错误:连接ETIMEDOUT 99.80.11.208:27017 在TCPConnectWrap.afterConnect上[完成时](net.js:1128:14){ 名称:“ MongoNetworkError”, [Symbol(mongoErrorContextSymbol)]:{}},[Symbol(mongoErrorContextSymbol)]:{}}(节点:42892) UnhandledPromiseRejectionWarning:MongoTimeoutError:服务器选择 30000毫秒后超时 在超时._onTimeout(C:\ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js:308:9) 在listOnTimeout(internal / timers.js:531:17) 在processTimers上(internal / timers.js:475:7)
我在server.js上的代码如下:
const mongoose = require('mongoose');
const router = express.Router();
// this is our MongoDB database
const dbRoute =
'mongodb+srv://user:<password>@cluster0-3zrv8.mongodb.net/test?retryWrites=true&w=majority';
mongoose.Promise = global.Promise;
// connects our back end code with the database
mongoose.connect(dbRoute,
{ useNewUrlParser: true,
useUnifiedTopology: true
});
let db = mongoose.connection;
db.once('open', () => console.log('connected to the database'));
有什么建议吗?
答案 0 :(得分:6)
在替换用户和密码字段时,请确保删除了“ <”和“>”。 这对我有用
答案 1 :(得分:6)
有时会发生此错误,原因是该IP地址获得了访问我们数据库的权限。
请记住,您的应用程序可以正常运行,然后出现此类错误。 每当这种情况发生时,大多数时候您的IP地址都已更改,这不在允许的地址白名单中。
您所要做的就是使用您当前的IP地址更新白名单
答案 2 :(得分:5)
只需转到mongodb atlas管理面板。进入安全选项卡>“网络访问”>然后通过添加IP将其列入白名单
See this image to locate the particular menu
注意:在Google上检查您的IP,然后将其添加
答案 3 :(得分:5)
我遇到了同样的错误。这些是我要解决的步骤
完成这些步骤后,它照常工作。希望对您有帮助。
答案 4 :(得分:1)
将您的连接IP地址列入白名单。 Atlas仅允许客户端从项目白名单中的条目连接到群集。项目白名单与API白名单不同,后者将API访问限制为特定的IP或CIDR地址。
注意
如果Atlas在“设置连接安全性”步骤中指示您已经在群集中配置了白名单条目,则可以跳过此步骤。要管理IP白名单,请参阅将条目添加到白名单。
如果白名单为空,Atlas会提示您将IP地址添加到项目的白名单中。您可以:
点击添加您的当前IP地址将您的当前IP地址列入白名单。
单击“添加其他IP地址”以添加单个IP地址或CIDR标记的地址范围。
对于在Amazon Web Services(AWS)上部署并使用VPC对等的Atlas群集,您可以添加与对等VPC关联的安全组。
您可以为新添加的IP地址或CIDR范围提供可选描述。点击添加IP地址,将地址添加到白名单。
答案 5 :(得分:0)
我遇到了这个问题,对我来说,解决方法是检查我的ip是否正确配置,然后在此屏幕中确认
答案 6 :(得分:0)
有时候,当您关闭MongoDB服务时,也会发生这种情况。
以下是打开MongoDB服务的步骤:
key + R
打开“运行”窗口。services.msc
打开服务窗口。start
。答案 7 :(得分:0)
尝试在群集中指定节点驱动程序版本2、2、12->连接->连接应用程序。新字符串必须与mongodb://一起使用。使用此字符串进行连接。不要忘记输入密码
答案 8 :(得分:0)
对于仍在努力解决此问题的任何人。我通过在猫鼬选项本身中设置所有参数(如用户名,密码和dbName)解决了此问题。
早期的代码是这样的。 (当我遇到错误时)。
import mongoose from "mongoose";
mongoose.Promise = require("bluebird");
let dbName = process.env.DB_NAME;
const dbAddress = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
if(!dbName || !dbAddress || !dbPort){
throw new Error("Mongo error unable to configuredatabase");
}
let options = {
useNewUrlParser: true,
useUnifiedTopology: true,
user:process.env.DB_USER,
pass: process.env.DB_PASS
};
mongoose.connect(`mongodb://${dbAddress}:${dbPort}/${dbName}`, options).catch(err => {
if (err.message.indexOf("ECONNREFUSED") !== -1) {
console.error("Error: The server was not able to reach MongoDB. Maybe it's not running?");
process.exit(1);
} else {
throw err;
}
});
请注意,mongo中的url连接。 mongodb://${dbAddress}:${dbPort}/${dbName}
。
没有错误的新代码。
import mongoose from "mongoose";
mongoose.Promise = require("bluebird");
let dbName = process.env.DB_NAME;
const dbAddress = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
// console.log("process.env", process.env)
if(!dbName || !dbAddress || !dbPort){
throw new Error("Mongo error unable to configuredatabase");
}
let options = {
useNewUrlParser: true,
useUnifiedTopology: true,
user:process.env.DB_USER,
pass: process.env.DB_PASS,
dbName: dbName
};
mongoose.connect(`mongodb://${dbAddress}:${dbPort}`, options).catch(err => {
if (err.message.indexOf("ECONNREFUSED") !== -1) {
console.error("Error: The server was not able to reach MongoDB. Maybe it's not running?");
process.exit(1);
} else {
throw err;
}
});
请注意选项和网址。
这是我的本地环境。不是生产环境。
希望这会有所帮助。
答案 9 :(得分:0)
我有同样的问题。我可以使用Atlas给我的连接字符串从MongoDB Compass或Node应用程序进行连接。我通过将IP地址添加到Atlas的白名单中来解决此问题。
答案 10 :(得分:0)
您是否在使用任何防病毒软件,防火墙,VPN或在受限网络上(例如,工作/商业Wi-Fi / LAN连接)?然后尝试将其关闭/重新连接到其他网络。您正在使用的网络的管理员可能阻止了某些IP /连接,或者只是防病毒才具有防火墙策略。即使您在MongoDB地图集的0.0.0.0
中拥有IP Address
,也是如此。
答案 11 :(得分:0)
这可能主要是因为npm更新。 我刚刚更新到npm v 6.13.7。我开始得到那个错误。
按照@Matheus的指示,我对“ {useUnifiedTopology:true}”行进行了注释,然后我就可以通过它。
我更新了猫鼬,一切正常。
答案 12 :(得分:0)
尝试使用默认身份验证方法“ SCRAM”在数据库访问中创建新用户。然后为此创建一个新的集群。它为我工作!我的 server.js 文件
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.createConnection("mongodb+srv://u1:u1@cluster0-u3zl8.mongodb.net/test", { userNewParser: true, useCreateIndex: true, useUnifiedTopology: true}
);
const connection = mongoose.connection;
connection.once('once', () => {
console.log(`MongoDB databse connection established successfully`);
})
app.listen(port, () => {
console.log(`Server is running on port: ${port}`);
});
答案 13 :(得分:0)
我能够解决问题。一切都很好,但是防火墙阻止了对端口27017的访问。可以在http://portquiz.net:27017/上测试连接性,也可以使用telnet到终结点,可以从clusters-> Metrics中获取。
谢谢大家的建议
答案 14 :(得分:0)
请检查您的密码,用户名或IP配置。通常,只要您的上述配置与服务器配置不匹配,就会出现“服务器选择在超时30000毫秒后超时。_onTimeout”。
答案 15 :(得分:0)
您可以删除 {useUnifiedTopology:true} 标志并重新安装猫鼬Dependecy! 它对我有用。
答案 16 :(得分:0)
您可以尝试:
private $last_query;
public function query($sql) {
$this->last_query = $sql;
return $this->adaptor->query($sql);
}
public function last_query() {
return $this->last_query;
}
答案 17 :(得分:-1)
我已经通过使用以下方法(使用回调)解决了这个问题。
const uri = '';
mongoose
.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true }, () => {
console.log("we are connected");
})
.catch((err) => console.log(err));
答案 18 :(得分:-2)
我已经通过以下方式解决了这个问题。
const URI = "mongodb://127.0.0.1:27017/DashApp"
const connectDB = async () => {
try {
const connection = await mongoose.connect(
URI,
{
useCreateIndex: true,
useNewUrlParser: true,
useFindAndModify: false,
useUnifiedTopology: true
}
)
console.log(`MongoDB connected: ${connection.connection.host}`);
} catch (error) {
console.log(`MongoDB error when connecting: ${error}`);
}
}
connectDB()