J'ai une MongoDB sur Azure et j'essaie de me connecter à l'aide du module npm mongodb :
var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:[email protected]:10355/?ssl=true", function (err, db) {
db.close();
});
Mon mot de passe a les caractéristiques suivantes:
=
, @
, $
et ainsi de suiteJe reçois ce qui suit lors de l'exécution du code ci-dessus:
Error: Password contains an illegal unescaped character
at parseConnectionString (C:\Users\myuser\Documents\myproj\node_modules\mongodb\lib\url_parser.js:280:13)
Cependant, la documentation ne dit pas grand chose sur la façon de résoudre ce problème. Je suppose que c'est un problème d'encodage. Comment régler ceci?
Des caractères comme @ sont restreints car ils bousillent la structure de l'URL. La raison en est que MongoDB l’interprète comme le séparateur @. Au lieu de cela:
var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:myp@[email protected]:10355/?ssl=true", function (err, db) {
db.close();
});
utilisez ceci
mongoClient.connect("mongodb://myuser:myp%[email protected]:10355/?ssl=true", {
uri_decode_auth: true
}, function (err, db) {
db.close();
});
Pour encoder le mot de passe, utilisez encodeURIComponent(password)
Vous pouvez également utiliser cette syntaxe.
mongoClient.connect("mongodb://myhost.documents.Azure.com:10355/?ssl=true",
{user: 'username', pass: 'p@ssword'}, function (err, db) {
db.close();
});
Sur les versions ultérieures, utilisez
auth: {
user: 'username',
password: 'p@ssword',
}
comme ci-dessous
mongoClient.connect("mongodb://myhost.documents.Azure.com:10355/?ssl=true", {
auth: {
user: 'username',
password: 'p@ssword',
}}, function (err, db) {
db.close();
});
La réponse acceptée ne fonctionne pas pour moi sur mongodb> 3.0.x
Ce code fonctionne pour moi:
const mongoClient = require("mongodb").MongoClient;
let database = null;
new mongoClient('mongodb://myhost.documents.Azure.com:10355/?ssl=true', {
auth: {
user: 'username',
password: 'p@ssword',
}
}).connect(
(err, db) => {
if (err) return console.error(err);
console.log('Database connected');
database = db.db('foo');
});
En fait, il existe un nom d'utilisateur distinct pour mongoDB et pour une base de données..ils ont un mot de passe différent
MongoDB peut maintenant utiliser un mot de passe avec des caractères spéciaux. Pour ce faire, ajoutez une option à la connexion { useNewUrlParser: true }
:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const uri = 'mongodb://mydbname:pa$s;w@[email protected]:27017/admin';
MongoClient.connect(uri, { useNewUrlParser: true }, (err, db) => {
assert.strictEqual(null, err);
// ...
db.close();
});