programing

MongoParseError: URI에 호스트 이름, 도메인 이름 및 tld가 없습니다.

sourcejob 2023. 5. 9. 22:37
반응형

MongoParseError: URI에 호스트 이름, 도메인 이름 및 tld가 없습니다.

내 앱(nodejs)을 mongodb에 연결하려고 할 때 이 오류가 발생합니다.여기서 도와주셔서 정말 감사합니다.

MongoParseError: URI does not have hostname, domain name and tld
    at parseSrvConnectionString (E:\Projects\NodeAPI\node_modules\mongodb-core\lib\uri_parser.js:41:21)
    at parseConnectionString (E:\Projects\NodeAPI\node_modules\mongodb-core\lib\uri_parser.js:509:12)
    at connect (E:\Projects\NodeAPI\node_modules\mongodb\lib\operations\mongo_client_ops.js:195:3)
    at connectOp (E:\Projects\NodeAPI\node_modules\mongodb\lib\operations\mongo_client_ops.js:284:3)
    at executeOperation (E:\Projects\NodeAPI\node_modules\mongodb\lib\utils.js:416:24)
    at MongoClient.connect (E:\Projects\NodeAPI\node_modules\mongodb\lib\mongo_client.js:175:10)
    at Function.MongoClient.connect (E:\Projects\NodeAPI\node_modules\mongodb\lib\mongo_client.js:341:22)
    at Object.<anonymous> (E:\Projects\NodeAPI\server.js:12:13)
    at Module._compile (internal/modules/cjs/loader.js:816:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
  name: 'MongoParseError',
  [Symbol(mongoErrorContextSymbol)]: {} }

내 코드:

db.js

 module.exports = {
uri : "mongodb+srv://mithun:*******@cluster0-s089x.mongodb.net/test?retryWrites=true"}

==================================================================

node_route.제이에스

 module.exports = function(app, db){
app.post('/notes', (req, res) => {
    const note = {text: req.body.body, title: req.body.title};
    db.collection('notes').insert(note, (err, results) => {
        if(err){
            res.send({'error': 'An error has occured'});
        } else {
            res.send(result.ops[0]);
        }
    });
 });
 };

index.js

 const noteRoutes = require('./note_route');
 module.exports = function(app, db){
 noteRoutes(app, db);
}

server.js

       const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const db = require('./config/db');
const app = express();
const port = 8000;
 app.use(bodyParser.urlencoded({extended: true}));
  MongoClient.connect(db.uri,{ useNewUrlParser: true }, (err, database) => 
  {
     if (err) return console.log(err);
     require('./app/routes')(app, database);
      app.listen(port, () => {
           console.log("We are live on " +port);
  });
 });

===========================================================================

module.exports = {
uri : "mongodb+srv://mithun:m3Thun#47@cluster0-s089x.mongodb.net/test?retryWrites=true&ssl=false"

}

ssl=false로 시도해 보았지만 오류는 그대로입니다.

암호의 특수 문자가 인코딩되었는지 확인합니다.예를 들어 암호에 '#'이 포함된 경우 리터럴 '#' 문자를 '%23'으로 대체해야 합니다. 여기서 23은 '#'에 대한 16진수 코드입니다. https://docs.atlas.mongodb.com/troubleshoot-connection/ #special-muters-in-connection-string-password

솔루션-1: 암호에 특수 문자를 사용하는 경우 특정 문자를 다음과 같이 인코딩해야 합니다.%+ASCII_code_of_the_character아래 링크는 모든 것을 설명합니다.https://docs.atlas.mongodb.com/troubleshoot-connection/ #special-computers-in-connection-string-password

솔루션-2: 자동 생성 암호를 클릭하여 연결 문자열에 붙여 넣으면 작동합니다.

스크린샷

암호 문자열에 특수 문자가 있을 수 있습니다.

-일 : -일 경우password!#,!#특수 문자입니다. 다음과 같이 다시 작성해야 합니다.%23%21는 "" " " " " " " "이어야 .password%23%21.

자세한 내용 - MongoDB, ASCII

암호에 # 대신 '%23'을 사용합니다.

mongoURI = "mongodb+srv://username:password@devconnector.jpokp.mongodb.net/dbname?retryWrites=true&w=majority"

mongoose .connect(mongoURI, { useNewUrlParser: true }) .then(() => console.log("MongoDB connected")) .catch((err) => console.log(err));

문자를 합니다.: / ? # [ ] @당신의 안에서.password또는username 예를 들어, e 의백지정니다합을분율자문다ers▁to▁percent지ange▁i니정합▁charact.

  1. @=%40
  2. '=%27
  3. !=%21
  4. ...

p@ssw0rd'9'! 되다p%40ssw0rd%279%27%21

+srv 연결 문자열 수정자를 사용하면 연결에 대한 ssl 옵션이 true로 자동 설정됩니다.쿼리 문자열에서 ssl 옵션을 ssl=false와 함께 false로 명시적으로 설정하여 이 동작을 재정의할 수 있습니다.

SSL 문제일 수도 있습니까? ssl: SSL 파일:ssl=false

저도 이 문제에 직면했습니다.

제경에는저, 는우는을 했습니다.npm dotenv - 사용자 를 " 암 를 가 옵 니 다 호 이 름지 사 용 에.envjava.

에서 기값을때했에서 때..env파일입니다. 암호를 제대로 검색하지 못했습니다.

사용자 이름 또는 암호에 문제가 있을 수 있습니다.

암호화를 시도합니다.

전)

# before encode
test@#123%^
# after encode
test%40%23123%25%5E

나를 위한 이 일 :)

오류는 암호에 다음과 같은 특수 문자를 사용하는 경우 발생합니다./ ? # [ ] @

  1. 이제 암호를 백분율 인코딩 암호로 변환해야 하므로,

@ = %40 %을 입력) (@ 대신 %40을 입력합니다.
? = %3F
# = %23
[ = %5B
] = %5D
여기에 특수 문자가 없으면 아래 링크를 사용하십시오.

  1. 암호를 입력하고 암호화된 백분율을 구하면 됩니다. https://www.w3schools.com/tags/ref_urlencode.ASP

사용자 이름 또는 암호에 다음 문자가 포함된 경우:

: **/ ? # [ ] @**

이러한 문자는 백분율 인코딩을 사용하여 변환해야 합니다.

이 사이트를 사용하여 변환할 수 있습니다.

https://www.w3schools.com/tags/ref_urlencode.ASP

MONGO_URI 암호에 %23으로 인코딩해야 하는 # 기호가 포함되어 있는 것을 보았습니다.

module.exports = {
uri : "mongodb+srv://mithun:m3Thun%2347@cluster0-s089x.mongodb.net/test?retryWrites=true&ssl=false"
}

@!: 등과 같은 특수 문자가 있거나 MongoDB 암호 생성기를 사용한 경우 사용자 이름 암호가 문자로 인코딩되어 있는지 확인하십시오. 자세한 내용은 다음을 참조하십시오. https://docs.mongodb.com/manual/reference/connection-string/ #filename

이 문제는 MongoDB 사용자에 특수 문자가 포함된 경우에 발생합니다. 암호에서 특수 문자를 제거해 보십시오.

제 경우, 연결 문자열에 공백이 있었던 것으로 드러났습니다. 이 공백은 Heroku가 구성 매개 변수에 대해 제공하는 작은 텍스트 입력 필드에서는 확인하기 어려웠습니다.

심지어 저도 같은 문제에 직면했고 저는 이 단계들을 수행했습니다. 그것은 저에게 효과가 있었습니다!

  1. 모노고 DB 데이터베이스(웹 사이트)로 이동합니다.
  2. 사용자 암호를 자동으로 생성된 암호로 변경합니다.
  3. 자동 생성된 암호를 URI 문자열에 붙여넣습니다.
  4. URI를 한 번, 두 번 확인하고 확인한 후 셸에서 앱을 실행합니다.

암호에 & 또는 ?(또는 특수 문자)가 포함되어 있을 수 있으므로 암호를 제거해야 합니다. 구문 분석 오류가 발생합니다.

이 오류 메시지는 일반적으로 잘못된 연결 문자열을 사용하여 MongoDB 데이터베이스에 연결하려고 할 때 발생합니다.사용한 암호에 구문 분석 오류가 발생하여 호스트 이름, 도메인 이름 및 tld와 같은 다른 구성 요소의 읽기를 더욱 제한하는 특수 문자가 포함되어 있습니다.각 구성 요소는 다음과 같습니다.

  • mongodb://는 MongoDB 연결에 사용되는 프로토콜입니다.

  • username:password는 인증이 필요한 경우 MongoDB 데이터베이스의 사용자 이름 및 암호입니다.

  • host는 MongoDB를 실행하는 서버의 호스트 이름 또는 IP 주소입니다.

  • port는 MongoDB가 수신 중인 포트 번호입니다(일반적으로 27017).

  • 데이터베이스는 연결할 데이터베이스의 이름입니다.비밀번호에 다음과 같은 특수 문자가 포함된 경우 -

    mongodb+srv://debendra8:Debendra@123@cluster0.f90gm67.mongodb.net /?retryWrites=true&w=majority굵은 글씨의 필드는 암호 필드이며 특수 문자 @가 포함되어 있습니다.각 UTF-8 형식을 확인하고 이 URL에서 대체합니다.

그럼 이제 내 비밀번호는...

mongodb+srv://debendra8:Debendra%40123@cluster0.f90gm67.mongodb.net/?retryWrites=true&w=majority

이제 문제가 해결됩니다.

MongoDB 나침반에서 다음 단계를 통해 해결했습니다.

  1. 연결 필드에 개별적으로 입력을 누릅니다.

연결 필드를 개별적으로 입력합니다.

  1. 사용자 이름과 암호를 입력합니다.

사용자 이름과 암호를 입력합니다.

연결 클릭

mongodb+srv://username:password@cluster0.qjasz.mongodb.net/database-name

<> 없이 사용자 이름 및 암호 사용

사용자 이름과 비밀번호에서 <>를 제거하고 비밀번호 특수 문자는 아래에 주어진 웹사이트를 사용하여 인코딩됩니다.

https://www.url-encode-decode.com/

예: %40123Password%23으로 인코딩된 @123Password#

노드 응용 프로그램에서 데이터베이스 연결(MongoDB) 중 아래 오류가 발생했습니다.

오류: URI에는 호스트 이름, 도메인 이름 및 tld가 포함되어야 합니다.

MongoDB 공식 사이트에서 특수 문자 연결 문자열 암호 설명서를 찾았습니다: 여기를 클릭하세요!

암호에 특수 문자가 포함되어 있고 연결 문자열 URI에서 암호를 사용하는 경우 특수 문자를 인코딩합니다.

databaseURI = 'mongodb+srv://<USERNAME>:<PASSWORD>@cluster0.jekotsl.mongodb.net/?retryWrites=true&w=majority'

보고된 오류의 근본 원인:특수 문자를 인코딩하는 대신 일반 암호를 입력했습니다.

솔루션:암호를 인코딩에서 URL 인코딩 형식으로 인코딩한 후 DB 연결이 성공했습니다.여기에 이미지 설명 입력

버전 3 이전에 라이브러리는 속성이 다음과 같이 접두사로 지정될 것으로 예상했습니다.env.앞으로 기본 동작은 접두사를 사용하지 않는 것입니다.접두사가 필요한 경우 다음과 같은 접두사를 제공할 수 있습니다.

prefix=env.

MONGO_URI="mongodb+srv://username:password@mernstack-pagination.dmkoc.mongodb.net/databaseName?retryWrites=true&w=majority"


//db
mongoose
  .connect(process.env.MONGO_URI)
  .then(() => console.log("DB Connected"))
  .catch((err) => console.log("DB ERROR => ", err));

언급URL : https://stackoverflow.com/questions/55753484/mongoparseerror-uri-does-not-have-hostname-domain-name-and-tld

반응형