3
votes

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

Je suis un tutoriel de Wes Bos, Learn Node.js.

J'ai téléchargé tous les fichiers de démarrage et créé une base de données avec MongoDb Atlas.

Lorsque j'exécute npm start, j'obtiens cette erreur :

DATABASE=mongodb+srv://<username>:<password>@cluster1-rgvum.mongodb.net/test?retryWrites=true

J'utilise une variable d'environnement pour me connecter à la base de données

mongoose.connect(process.env.DATABASE);

et la variable ressemble à ceci:

UnhandledPromiseRejectionWarning: Error: URI does not have hostname, domain name and tld
DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

J'ai omis mon nom d'utilisateur et mon mot de passe pour des raisons évidentes. Si quelqu'un a une idée de la façon de procéder, ce serait très apprécié! Merci.


2 commentaires

Pouvez-vous confirmer console.log (process.env.DATABASE); renvoie l'URI correct?


Oui, je reviens: mongodb + srv: // : @ cluster1-rgvum.mongodb.n‌ et / test? RetryWrites = ‌ true exactement comme il est dans mon dossier env.


6 Réponses :


0
votes

Essayez d'ajouter des guillemets:

DATABASE="mongodb+srv://<username>:<password>@cluster1-rgvum.mongodb.net/test?retryWrites=true"


0 commentaires

2
votes

Assurez-vous que votre nom d'utilisateur et votre mot de passe ne contiennent pas de caractères spéciaux. Cela interrompra l'analyse.

C'est ce qui m'a amené à rencontrer la même erreur.


0 commentaires

2
votes

Cela a à voir avec des caractères spéciaux dans votre URI (probablement votre mot de passe).

Essayez ceci:

"mongodb+srv://<username>:" + encodeURIComponent(<password>) + "@cluster1-rgvum.mongodb.net/test?retryWrites=true"


0 commentaires

0
votes

Cela se produit parce que votre mot de passe n'est pas encodé en URL. La connexion Mongo nécessite que le mot de passe soit encodé en URL. Essayez simplement d'ajouter {useNewUrlParser: true} à votre méthode de connexion. Voir ci-dessous:

mongoose.connect(keys.mongoURI, {useNewUrlParser: true}, (err, db) => {});


0 commentaires

7
votes

Oui, c'est à cause de l'utilisation de caractères spéciaux dans les mots de passe, utilisez simplement cette méthode simple soit en utilisant les codes compliqués ci-dessus pour l'encodage.

Dans le mot de passe, utilisez le code hexadécimal au lieu des symboles que vous utilisez dans le mot de passe, comme si votre mot de passe dans le texte est: - pass123 #

alors utilisez-le comme: - pass123% 23

Obtenez des codes ASCII à partir d'ici et utilisez le code hexadécimal: - https://ascii.cl/

Pour plus d'informations: - https : //docs.atlas.mongodb.com/troubleshoot-connection/#special-characters-in-connection-string-password


0 commentaires

0
votes

Face aux mêmes problèmes. Ce n'est pas une URL encodée ...

Solution RAPIDE Le meilleur cas pour créer un mot de passe sécurisé est d'utiliser la fonction «Générer automatiquement un mot de passe sécurisé» dans cloud.mongodb.com pour répondre aux exigences.

 entrez la description de l'image ici


0 commentaires