11
votes

MongoParseError: l'URI n'a pas de nom d'hôte, de nom de domaine et de tld

J'obtiens cette erreur lorsque j'essaye de connecter mon application (nodejs) à mongodb. J'apprécie vraiment votre aide ici.

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

Mon code:

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

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

node_route.js

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

=================================================== ===================== 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

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

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

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

}

J'ai essayé avec ssl = false mais l'erreur reste la même.


4 commentaires

Veuillez coller votre code que vous utilisez pour vous connecter à mongo


L'erreur semble suggérer que votre variable URI ne contient pas de chaîne de connexion valide ( docs.mongodb.com/manual/reference/connection-string/#exampl‌ es ). Êtes-vous sûr que cette variable contient une chaîne de connexion valide?


@ patricK, @ Adam Harrison ... Toute idée à ce sujet.


supprimer le + srv après mongodb devrait être une solution rapide


10 Réponses :


2
votes

L'utilisation du modificateur de chaîne de connexion + srv définit automatiquement l'option ssl sur true pour la connexion. Vous pouvez remplacer ce comportement en définissant explicitement l'option ssl sur false avec ssl = false dans la chaîne de requête.

Cela peut-il être un problème SSL? Essayez sans ssl: ssl=false


3 commentaires

module.exports = {uri: "mongodb + srv: // mithun: ********@cluster0-s089x.mongodb.net/te‌ st? retryWrites = true & ‌ ssl = false"


@ mithun47varghesevarghese_Jr Salut, avez-vous résolu ce problème, veuillez partager votre solution


Cela a fonctionné. Au lieu d'ajouter ssl=false , j'ai supprimé +srv .



15
votes

J'ai également rencontré ce problème, en essayant de créer une application de démonstration, j'ai mis à jour mon mot de passe en utilisant un mot de passe de génération automatique, c'est-à-dire que j'ai cliqué sur le mot de passe de génération automatique et je l'ai collé dans la chaîne de connexion, cela a fonctionné pour moi.

capture d'écran


5 commentaires

Cela a résolu le problème pour moi. Merci d'aider la communauté.


Merci pour vos aimables paroles @MrMegamind, faites un vote pour que les autres puissent également en profiter


Si vous utilisez un caractère spécial dans votre mot de passe, vous devez encoder le caractère particulier comme '% + ASCII_code_of_the_character' ci-dessous le lien explique tout " docs.atlas.mongodb.com/troubleshoot-connection/... "


C'était en fait le problème! @Priyom saha


@Akhila Cela a fonctionné? n'hésitez pas à voter Merci



25
votes

Assurez-vous que les caractères spéciaux de votre mot de passe sont codés. Par exemple, si votre mot de passe contient '#', vous devez remplacer le caractère littéral '#' par '% 23' où 23 est le code hexadécimal pour '#' voir: https://docs.atlas.mongodb.com/troubleshoot-connection / # caractères spéciaux dans la chaîne de connexion mot de passe


2 commentaires

vous devriez maintenant avoir 10 votes positifs. Vous m'avez épargné plus d'une heure de recherche et de maux de tête typiques du travail avec Mongo et mangouste.


Juste du bonheur.



0
votes

Assurez-vous que le mot de passe du nom d'utilisateur est codé en caractères si vous avez des caractères spéciaux comme @ !: etc ou que vous avez utilisé le générateur de mot de passe MongoDB Voir: https://docs.mongodb.com/manual/reference/connection-string/#examples


0 commentaires

6
votes

Vous pouvez avoir des caractères spéciaux dans votre chaîne de mot de passe .

Par exemple, si votre mot de passe était - password!# !# Sont des caractères spéciaux , ils devraient être réécrits sous la forme %23%21 . Ainsi, le mot de passe de votre chaîne de connexion doit être le password%23%21 .

Pour plus d'informations - MongoDB , ASCII


0 commentaires

0
votes

Ce problème survient si votre utilisateur MongoDB contient des caractères spéciaux Essayez de supprimer un caractère spécial du mot de passe


0 commentaires

1
votes

J'ai également fait face à ce problème.

Dans mon cas, npm dotenv package npm dotenv pour obtenir le nom d'utilisateur et le mot de passe à partir d'un fichier .env .

Lorsque j'ai enregistré les valeurs du fichier .env , j'ai remarqué qu'il ne récupérait pas correctement le mot de passe.

Cela peut être un problème avec le nom d'utilisateur ou le mot de passe.


0 commentaires

2
votes

utilisez '% 23' au lieu de # dans votre mot de passe et

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


0 commentaires

0
votes

Dans mon cas, il s'est avéré que j'avais un espace dans la chaîne de connexion, ce qui était difficile à voir dans le petit champ de saisie de texte fourni par Heroku pour les paramètres de configuration.


0 commentaires

0
votes

Même moi, j'ai rencontré le même problème et j'ai suivi ces étapes, cela a fonctionné pour moi!

  1. Accédez à votre base de données monogoDB (site Web).
  2. Remplacez le mot de passe utilisateur par un mot de passe généré automatiquement.
  3. Collez ce mot de passe généré automatiquement dans la chaîne URI.
  4. Vérifiez l'URI une et deux fois, confirmez-le et exécutez l'application dans le shell.

0 commentaires