Ответ 1
Используйте этот синтаксис:
mongoClient.connect("mongodb://username:p%[email protected]:port/dbname?authSource=admin", {
useNewUrlParser: true
}, function(err, db) {
}
);
Я пытаюсь подключиться к базе данных MongoDB с именем пользователя и паролем, используя Mongoose в Node.js. Все документы говорят, что строка подключения должна выглядеть как
mongodb://username:[email protected]:port/db
Однако пароль содержит символ "@". Как я могу сделать строку соединения из этого, что поймут мангуста? Могу ли я избежать "@" в пароле или есть ли другой способ подключения, который я должен использовать?
Используйте этот синтаксис:
mongoClient.connect("mongodb://username:p%[email protected]:port/dbname?authSource=admin", {
useNewUrlParser: true
}, function(err, db) {
}
);
Если ваш пароль содержит специальные символы:
const dbUrl = 'mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb';
Используйте параметр options
вызова mongoose.connect
, чтобы указать пароль, а не включать его в строку URL:
mongoose.connect('mongodb://localhost/test',
{user: 'username', pass: '[email protected]'},
callback);
Я также столкнулся с той же проблемой. Я решил, добавив зашифрованный пароль в строку подключения. И это работает очень хорошо.
(1) Кодируйте свой пароль от https://www.url-encode-decode.com
(2) Замените ваш пароль на зашифрованный.
(3) Это должно работать хорошо.
Например:
Фактический пароль: ABCDEX $ KrrpvDzRTy '@drf.'; 3X
Кодированный пароль: ABCDEX% 24KrrpvDzRTy% 60% 40drf.% 27% 3B3X
mongodb://user1:ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]:1234,ds1234-test.com:19889/mongo-dev?replicaSet=rs-ds123546978&ssl=true',
используйте pwd вместо pass, который работал у меня для версии3.2
mongoose.connect('mongodb://localhost/test',
{user: 'username', pwd: '[email protected]'},
callback);
Попробуйте это, друзья:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
{user: 'viettd', pass: '[email protected]'});
test
- мое имя db admin
является моим db для аутентификации viettd
- мое имя пользователя [email protected]
- мой пароль
Ни одно из упомянутых выше решений не помогло мне. Я исследовал это дальше и обнаружил, что мне нужно было включить параметр useNewUrlParser.
mongoose.connect(db, {
useNewUrlParser : true
},
err => {
if (err){
console.error('Error: ' + err)
}
else{
console.log('Connected to MongoDb')
}
})
Из того, что я понимаю, вам нужна определенная версия MongoDB, чтобы использовать это. Подробнее см. в разделе Избегать предупреждения о том, что текущий анализатор строк URL устарел, установив для useNewUrlParser значение true
.Это избавление от предупреждения, но версия также влияет на требуемый параметр.
Я не проверял все специальные символы, но он определенно работает с '@# $'.
Надеюсь это поможет.
Если вы используете собственный драйвер Mongodb Node.js, это то, что мне подходит для версии драйвера 3.1. Предположим, что ваш URL не содержит информацию об аутентификации.
MongoClient = require('mongodb').MongoClient;
let options = {
useNewUrlParser: true,
auth: {
user: 'your_usr',
password: 'your_pwd'
}
};
MongoClient.connect(url, options, callback);
Или, если вы хотите включить информацию об аутентификации в свой URL, сделайте следующее:
let url = "mongodb://username:" + encodeURIComponent("[email protected]") + "@localhost:27017/database"
иногда вам нужно подключиться к БД с помощью других инструментов, которые принимают строку только как строку подключения. поэтому просто измените знак @на% 40
Also, if your password contains a percentage, %,
Because the percent ("%") character serves as the indicator for percent-encoded octets, it must be percent-encoded as "%25" for that octet to be used as data within a URI
for example, if your password is John%Doe, the new transformed password will be John%25Doe or
If password is Paul%20Wait, New Password will be Paul%2520Wait
mongoClient.connect("mongodb://username:John%[email protected]:port/dbname", function(err, db) {
// password is John%Doe
}'enter code here'
);
Это решение требует дополнительной зависимости, но в конечном итоге это сработало для меня.
Добавьте mongodb-uri
в свой проект и следующие строки в свой код:
const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)
Я нашел это предложение в mongoose
выпуске GitHub # 6044.
Для тех, кто соединяется с Mongo Compass. (MacOSx) Просто перейдите в свой кластер ->Безопасность(вкладка) на mongodb.com
Тогда
измените свой пароль (нажмите кнопку редактирования на вашем имени пользователя):
Вы получите модальное/всплывающее окно/диалоговое окно: нажмите "Изменить пароль" под вашим именем (по умолчанию кнопка неактивна, но отображается под вашим именем) → Затем нажмите Обновить пользователя
Далее:
Закройте приложение mongo db compass, если оно запущено: (Выход из Mongo)
Следующий шаг:
Вернитесь на вкладку "Обзор" на сайте mongodb.com и выберите Connect
Следующий шаг:
В появившемся диалоговом окне выберите Connect with MongoDB Compass, а затем в следующем представлении выберите версию, которую вы хотите использовать (предпочтительно VersionNumber ранее):
Тогда:
Скопируйте строку URI, представленную вам:
Откройте приложение MongoDB Compass:
И это даст вам возможность/всплывающее окно для использования обнаруженной строки URI: нажмите Да
Последний шаг:
Введите новый пароль и подключите.
Теперь ваше соединение должно быть успешным.