MongoParseError:URI没有主机名,域名和顶级域名

mit*_*_Jr 5 mongodb node.js express

当我尝试将我的应用程序(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)]: {} }
Run Code Online (Sandbox Code Playgroud)

我的代码:

db.js

 module.exports = {
uri : "mongodb+srv://mithun:*******@cluster0-s089x.mongodb.net/test?retryWrites=true"}
Run Code Online (Sandbox Code Playgroud)

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

node_route.js

 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]);
        }
    });
 });
 };
Run Code Online (Sandbox Code Playgroud)

================================================== ===================== index.js

 const noteRoutes = require('./note_route');
 module.exports = function(app, db){
 noteRoutes(app, db);
}
Run Code Online (Sandbox Code Playgroud)

================================================== ======================= 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);
  });
 });
Run Code Online (Sandbox Code Playgroud)

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

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

}

我尝试使用ssl = false,但错误仍然相同。

thi*_*ent 55

确保对密码中的特殊字符进行编码。例如,如果您的密码包含“#”,则应将文字“#”字符替换为“%23”,其中 23 是“#”的十六进制代码,请参见:https : //docs.atlas.mongodb.com/troubleshoot-connection /#special-characters-in-connection-string-password


Man*_*noj 35

解决方案 1:如果您在密码中使用任何特殊字符,则需要对特定字符进行编码,如%+ASCII_code_of_the_character下面的链接解释了一切。 https://docs.atlas.mongodb.com/troubleshoot-connection/#special-characters-in-connection-string-password

解决方案2: 单击自动生成密码并将其粘贴到连接字符串中,它将起作用。

截屏

  • 如果您在密码中使用任何特殊字符,则需要将特定字符编码为“%+ASCII_code_of_the_character”,下面的链接解释了所有内容“https://docs.atlas.mongodb.com/troubleshoot-connection/#special-characters-in -连接字符串密码” (12认同)

m'h*_*mps 17

将或: / ? # [ ] @中的特殊字符 ( ) 转换为百分号字符,即passwordusername

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

例如 p@ssw0rd'9'!变成p%40ssw0rd%279%27%21


Bil*_*lbo 12

您的密码字符串中可能包含特殊字符

例如,如果您的密码是 - password!#,!#特殊字符,则必须将它们重写为%23%21. 因此,您的连接字符串密码应该是password%23%21.

有关更多信息 - MongoDB , ASCII


pat*_*icK 5

使用 +srv 连接字符串修饰符会自动将连接的 ssl 选项设置为 true。您可以通过在查询字符串中使用 ssl=false 显式将 ssl 选项设置为 false 来覆盖此行为。

可能是 ssl 问题吗?尝试不使用 ssl: ssl=false


小智 5

在您的密码中使用 '%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));


The*_* 24 5

出现此错误的原因是,如果您在密码中使用某些特殊字符 ,例如:/ ? # [ ] @

  1. 现在您必须将密码转换为百分比编码密码,因此对于该输入,

@ = %40(用 %40 代替 @)
? = %3F
# = %23
[ = %5B
] = %5D
如果此处找不到某些特殊字符,请使用下面的链接。

  1. 只需输入您的密码即可获取百分比编码密码:https ://www.w3schools.com/tags/ref_urlencode.ASP


小智 5

如果用户名或密码包含以下字符:

: **/ ? # [ ] @**
Run Code Online (Sandbox Code Playgroud)

这些字符必须使用百分比编码进行转换

您可以使用此网站进行转换 -

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"
}
Run Code Online (Sandbox Code Playgroud)