MongoDB Atlas에 연결할 때 'Error: querySv EREFUSED'를 해결하는 방법은 무엇입니까?
하여 Node웹 MongoDB 4.0.6에 Node/Express.js를 사용합니다.mongodb+srv://${process.env.MONGOUSER}:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main다음 오류가 발생합니다.
오류: Srv REFUSED_mongodb를 쿼리합니다.QueryReqWrap.onresolve [as oncomplete](165.js:199:19)의 _syscall.main-03xkr.mongodb.net 에서 errno: 'EREFUSED', 코드: 'EREFUSED', syscall: 'querySrv', 호스트 이름: '_mongodb._http.main-03xkr.mongodb.net ' }
에연해보다니습았결에 .mongodb://localhost:27017/main하지만 이것은 효과가 있는 것 같습니다.
다음은 관련 코드입니다.
require('dotenv').config();
const mongoose = require('mongoose');
// Database
const uri = `mongodb+srv://${process.env.MONGOUSER}:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main`;
const localURI = 'mongodb://localhost:27017/main';
var Project = require('./models/project');
mongoose.connect(uri, { useNewUrlParser: true });
const db = mongoose.connection;
db.once('open', () => console.log('Successfully connected to MongoDB'));
db.on('error', (e) => console.log(e));
// Routes
app.get('/', (req, res) => {
Project.find({}, (e, projects) => {
if (e) console.log(e);
res.render('home.ejs', {
projects: projects
});
});
});
이 오류를 해결하고 여기서 무슨 일이 일어나고 있는지 설명할 수 있는 방법을 아는 사람이 있습니까?
이 오류가 발생하면 Node.js 2.2.12 이상에 대해 이전 연결 문자열을 사용해 보십시오.
mongodb://<username>:<password>@main-shard-00-00-03xkr.mongodb.net:27017,main-shard-00-01-03xkr.mongodb.net:27017,main-shard-00-02-03xkr.mongodb.net:27017/main?ssl=true&replicaSet=Main-shard-0&authSource=admin&retryWrites=true
MongoDB에 따르면, SRV는 Mongoose 때문에 작동하지 않을 수 있습니다.
연결할 때 동일한 오류가 발생했습니다.Node 전3.0 or later그리고 저는 그것을 다운그레이드함으로써 해결했습니다.2.2.12 or later버전:
저의 경우, 주로 Mac의 DNS 문제입니다. 이 문제를 해결하려면 Macbook pro 설정의 DNS 섹션 아래에 Google DNS 서버를 추가하십시오.
8.8.8.8
4.4.4.4
이 오류는 MongoDB Atlas를 사용 중이고 인터넷 연결이 끊겼을 때 가끔 발생합니다.데이터베이스에 액세스할 수 없습니다.
노드 버전을 2.2.12로 변경해야 합니다.

IP 주소 추가:

옵션 패스 션{ useNewUrlParser: true, useUnifiedTopology: true } MongoClient에게
const uri = "mongodb+srv://${process.env.MONGOUSER}:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main"
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
.catch(error => console.log(error));
저의 경우 오랜 비활성으로 인해 mongodb 클러스터가 자동으로 일시 중지되어 이 오류가 발생했습니다.방금 다시 시작했는데, 제대로 시작되었습니다.
당신은 가지고 있다undefined연결 문자열에 있습니다.이게 오타인지 아닌지 모르겠어요.하지만 변화를 시도합니다.
const uri = `mongodb+srv://undefined:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main`;
로.
const uri = `mongodb+srv://${process.env.MONGOUSER}:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main`;
나는 MongoAtlas를 프로젝트에 사용하고 있고 그 문자열(정의되지 않은 사용자 제외)은 정확해 보입니다.
바이러스 백신/방화벽이 차단되는 경우,
바이러스 백신/방화벽을 비활성화하고 다시 확인합니다.효과가 있기를 바랍니다.
Error: querySrv ESERVFAIL _mongodb._tcp.databasename-zcbag.mongodb.net
at QueryReqWrap.onresolve [as oncomplete] (dns.js:202:19) {
errno: 'ESERVFAIL',
code: 'ESERVFAIL',
syscall: 'querySrv',
hostname: '_mongodb._tcp.databasename-zcbag.mongodb.net'
}
위의 코드가 당신의 출력이면 당신의 코드에는 오류가 없습니다.당신은 당신의 네트워크 연결을 확인해야 합니다.네트워크를 전화 네트워크에서 다른 네트워크로 전환하거나 그 반대로 전환해야 할 수도 있습니다.
MongoClient.connect(
"mongodb://USER:PASSWORT@mflix-shard-00-00-r5yfb.mongodb.net/test?ssl=true&replicaSet=mflix-shard-0&authSource=admin&retryWrites=true&w=majority",
{ useNewUrlParser: true, useUnifiedTopology: true },
)
.catch(err => {
console.error(err.stack)
process.exit(1)
})
.then(async client => {
await MoviesDAO.injectDB(client)
await UsersDAO.injectDB(client)
await CommentsDAO.injectDB(client)
app.listen(port, () => {
console.log(`listening on port ${port}`)
})
})
MongoClient(Mongoose가 아님)와 함께 작동할 수 있습니다.
제 경우, TP-Link Router의 DNS 구성이 누락되었을 때 이 오류가 발생했습니다.
OpenWRT 펌웨어를 설치했는데 DNS 설정을 조정하는 것을 잊었습니다.
저는 유튜브나 다른 웹사이트를 열 수 있었습니다. 왜냐하면 그것은 제 메인 라우터가 아니기 때문입니다. 하지만 데이터베이스에 연결할 수는 없었습니다.
@Kamesh Kumar Singh가 답변에서 말한 것처럼 인터넷 문제였습니다.
저는 이것이 이 질문에 대한 일반적인 대답은 아니지만 누군가에게 도움이 될 수 있다고 생각합니다.
mongoDB Atlas 데이터베이스에 연결할 수 없는 경우 이 오류가 발생합니다.서버가 성공적으로 실행되지만 데이터베이스에 연결하는 동안 이 오류가 발생합니다.인터넷 연결이 양호한지 확인하고 다시 시도하면 이 오류가 표시되지 않습니다.
저의 경우, MongoDB가 4개월 이상의 비활성 상태로 인해 클러스터를 일시 중지했기 때문에 문제가 발생했습니다.제 계정에 로그인하고 클러스터 활동을 재개한 후 문제가 즉시 해결되었습니다.
MongoDB -> login -> databases -> connect -> application 연결(가운데) -> copy code -> code를 mongoose에 붙여넣음으로써 내 것을 해결했습니다.내 DB 코드입니다.JS 파일:
const mongoose = require('mongoose');
require('dotenv/config');
mongoose
.connect(process.env.THE_MONGO_DB_URL_GOES_HERE_IN_DOTENV_FILE, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
})
.then(() => console.log("Database connected!"))
.catch(err => console.log(err));
const PostSchema = mongoose.Schema({
email: String,
password: String
}, {strict: false});
const DataEntry = mongoose.model('n26-users-collection', PostSchema);
module.exports = DataEntry;
"루트 폴더에 없음" 시나리오:
프로젝트의 루트 디렉터리에 .env 파일을 만듭니다.https://github.com/motdotla/dotenv
이 오류에 대한 한 가지 시나리오는 dotenv를 만드는 것입니다. .env파일 --NOT--의root folder(아래)/src예를 들어).
이 코드보다 더:
const url = `mongodb+srv://${process.env.DB_USER}:${
process.env.DB_USER_PASSWORD
}@${process.env.DB_CLUSTER}.mongodb.net`;
console.log(url)
출력:
mongodb+srv://undefined:undefined@undefined.mongodb.net
그래서 그"undefined"URL:
const client = new MongoClient(url);
경고 3개를 던집니다.
(노드:27240) 처리되지 않은 약속거부 경고: 오류: 쿼리Srv ENOTFOUND_mongodb.QueryReqWrap.onresolve [as oncomplete]의 _syslog.undefined.mongodb.net (syslog.js:dll:19)
되지 않은 약속(예:27240) 거부 되지 않은 거부처리되지 않은 약속 거부입니다.이 오류는 캐치 블록 없이 비동기 함수 내부를 던지거나 .catch()로 처리되지 않은 약속을 거부함으로써 발생했습니다.되지 않은 거부 시 플래그 " " " " " " " " " " " " " " " " " " " " " " " " " 를 합니다.
--unhandled-rejections=strict(https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode) 참조).(사용자 ID: 1)
(노드:27240) [DEP0018] 사용 중지 경고:처리되지 않은 약속 거부는 더 이상 사용되지 않습니다.앞으로 처리되지 않는 약속 거부는 0이 아닌 종료 코드로 Node.js 프로세스를 종료합니다.
"닫힌" 시나리오가 하나 더 있습니다. .env루트 폴더에 있지만 파일이 비어 있습니다.
해결책
이 문제를 해결하기 위한 첫 번째 단계는 다음과 같습니다.console.log(url)그리고 확인합니다.process.env올바른 연결 문자열을 반환합니다.
관련:
- dotenvithub readme: https://github.com/motdotla/dotenv#readme
- Node.js를 사용하여 MongoDB 데이터베이스에 연결: https://developer.mongodb.com/quickstart/node-connect-mongodb/
대부분의 경우 이 오류는 mongodb 드라이버와 연결 문자열이 일치하지 않을 때 발생합니다.Mongodbatlas connect 섹션에 지정된 대로 연결 문자열과 해당 드라이버를 사용해야 합니다.중요한 팁, 최신 mongodb 드라이버를 사용하지 마십시오.이전 버전을 사용합니다.연결 문제를 쉽게 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/55499175/how-to-fix-error-querysrv-erefused-when-connecting-to-mongodb-atlas
'programing' 카테고리의 다른 글
| 이클립스에서 가장 최근에 시작한 프로그램을 다시 실행할 수 있는 바로 가기가 있습니까? (0) | 2023.05.04 |
|---|---|
| iOS – Wi-Fi를 통한 빌드 실행/디버그/설치 (0) | 2023.05.04 |
| mongodb에서 findOne을 사용하여 maxid를 가진 요소 가져오기 (0) | 2023.05.04 |
| Mongo "사전 할당" 파일이 공간을 차지합니다. (0) | 2023.05.04 |
| Meteor 프로덕션 데이터베이스 액세스 (0) | 2023.05.04 |



