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.
암호에 # 대신 '%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.
@=%40'=%27!=%21...
예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
나를 위한 이 일 :)
이 오류는 암호에 다음과 같은 특수 문자를 사용하는 경우 발생합니다./ ? # [ ] @
- 이제 암호를 백분율 인코딩 암호로 변환해야 하므로,
@ = %40 %을 입력) (@ 대신 %40을 입력합니다.
? = %3F
# = %23
[ = %5B
] = %5D
여기에 특수 문자가 없으면 아래 링크를 사용하십시오.
- 암호를 입력하고 암호화된 백분율을 구하면 됩니다. 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가 구성 매개 변수에 대해 제공하는 작은 텍스트 입력 필드에서는 확인하기 어려웠습니다.
심지어 저도 같은 문제에 직면했고 저는 이 단계들을 수행했습니다. 그것은 저에게 효과가 있었습니다!
- 모노고 DB 데이터베이스(웹 사이트)로 이동합니다.
- 사용자 암호를 자동으로 생성된 암호로 변경합니다.
- 자동 생성된 암호를 URI 문자열에 붙여넣습니다.
- 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 나침반에서 다음 단계를 통해 해결했습니다.
- 연결 필드에 개별적으로 입력을 누릅니다.
- 사용자 이름과 암호를 입력합니다.
연결 클릭
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
'programing' 카테고리의 다른 글
| Azure 로그인 자격 증명을 사용하여 FTP를 통해 Azure 웹 사이트에 연결 (0) | 2023.05.09 |
|---|---|
| \r\n, \r 및 \n의 차이는 무엇입니까? (0) | 2023.05.09 |
| .NET Core는 Windows 1252에 대해 알지 못합니다. 해결 방법은 무엇입니까? (0) | 2023.05.09 |
| $name 필드는 누적 개체여야 합니다. (0) | 2023.05.09 |
| 작업 완료 시기소스를 사용하시겠습니까? (0) | 2023.05.09 |

