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

时间:2019-04-18 20:42:56

标签: node.js mongodb express

当我尝试将我的应用程序(nodejs)连接到mongodb时出现此错误。非常感谢您的帮助。

fn count_calls<S, F>(s: S, mut f: F) -> u32
where
    S: Clone,
    F: FnMut(&dyn Fn() -> S) -> (),
{
    let counter: Cell<u32> = Cell::new(0);

    f(&|| {
        counter.set(counter.get() + 1);
        s.clone()
    });
    counter.into_inner()
}

我的代码:

db.js

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)]: {} }

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

node_route.js

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

================================================ ======================== index.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]);
        }
    });
 });
 };

================================================ ========================= server.js

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

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

       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);
  });
 });

}

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

12 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

我也遇到了这个问题,在尝试创建演示应用程序时,我使用自动生成的密码更新了密码,即我单击了自动生成的密码并将其粘贴到连接字符串中,对我有用。

https://i.stack.imgur.com/o85IV.png

答案 2 :(得分:3)

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

答案 3 :(得分:1)

我也遇到了这个问题。

以我为例,我使用的是npm dotenv软件包,它从.env文件中获取用户名和密码。

当我记录.env文件中的值时,我发现它没有正确检索密码。

用户名或密码可能有问题。

答案 4 :(得分:1)

尝试对密码进行编码

例如)

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

这对我有用:)

答案 5 :(得分:0)

  

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

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

答案 6 :(得分:0)

如果用户名密码中包含@ !:等特殊字符或使用过的MongoDB密码生成器,请确保用户名密码已进行字符编码 看到:  https://docs.mongodb.com/manual/reference/connection-string/#examples

答案 7 :(得分:0)

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

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

有关更多信息-MongoDBASCII

答案 8 :(得分:0)

如果您的MongoDB用户包含任何特殊字符,则会出现此问题 尝试从密码中删除任何特殊字符

答案 9 :(得分:0)

以我为例,事实证明我在连接字符串中有一个空格,这在Heroku提供的用于配置参数的小文本输入字段中很难看到。

答案 10 :(得分:0)

即使我遇到了同样的问题,我也做了这些步骤,对我来说很成功!

  1. 转到您的monogoDB数据库(网站)。
  2. 将用户密码更改为自动生成的密码。
  3. 将自动生成的密码粘贴到URI字符串中。
  4. 检查一次URI,然后确认两次并在shell中运行该应用程序。

答案 11 :(得分:0)

我认为您的密码可能包含 & 或 ? (或可能是特殊字符)所以你应该删除它,导致解析错误