programing

MongoDB Atlas에 연결할 때 'Error: querySv EREFUSED'를 해결하는 방법은 무엇입니까?

golfzon 2023. 5. 4. 20:48
반응형

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 때문에 작동하지 않을 수 있습니다.

연결할 때 동일한 오류가 발생했습니다.Node3.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올바른 연결 문자열을 반환합니다.


관련:

대부분의 경우 이 오류는 mongodb 드라이버와 연결 문자열이 일치하지 않을 때 발생합니다.Mongodbatlas connect 섹션에 지정된 대로 연결 문자열과 해당 드라이버를 사용해야 합니다.중요한 팁, 최신 mongodb 드라이버를 사용하지 마십시오.이전 버전을 사용합니다.연결 문제를 쉽게 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/55499175/how-to-fix-error-querysrv-erefused-when-connecting-to-mongodb-atlas

반응형