#mongodb #heroku
#mongodb #heroku
Вопрос:
Я пытаюсь развернуть чат-бота Facebook на Heroku, но я получаю эту ошибку:
2019-03-26T01:34:39.286607 00:00 app[web.1]: Error: Password contains an illegal unescaped character
2019-03-26T01:34:39.286618 00:00 app[web.1]: at parseConnectionString (/app/node_modules/mongodb/lib/url_parser.js:298:13)
2019-03-26T01:34:39.286620 00:00 app[web.1]: at parseHandler (/app/node_modules/mongodb/lib/url_parser.js:129:14)
2019-03-26T01:34:39.286622 00:00 app[web.1]: at module.exports (/app/node_modules/mongodb/lib/url_parser.js:25:12)
2019-03-26T01:34:39.286623 00:00 app[web.1]: at deprecated (internal/util.js:67:15)
2019-03-26T01:34:39.286625 00:00 app[web.1]: at connect (/app/node_modules/mongodb/lib/operations/mongo_client_ops.js:195:3)
2019-03-26T01:34:39.286626 00:00 app[web.1]: at connectOp (/app/node_modules/mongodb/lib/operations/mongo_client_ops.js:284:3)
2019-03-26T01:34:39.286628 00:00 app[web.1]: at executeOperation (/app/node_modules/mongodb/lib/utils.js:416:24)
2019-03-26T01:34:39.286630 00:00 app[web.1]: at MongoClient.connect (/app/node_modules/mongodb/lib/mongo_client.js:169:10)
2019-03-26T01:34:39.286631 00:00 app[web.1]: at Function.MongoClient.connect (/app/node_modules/mongodb/lib/mongo_client.js:335:22)
2019-03-26T01:34:39.286633 00:00 app[web.1]: at Timeout.connectToMongo [as _onTimeout] (/app/index.js:37:14)
Я использовал очень простой пароль, но он по-прежнему выдает ту же ошибку. Как я могу это исправить?
Я временно использую 01234567890
в качестве своего пароля. Когда я ввожу его в свою строку подключения, я получаю что-то вроде
mongodb srv://myuser:<01234567890>@host.gcp.mongodb.net/test?retryWrites=true
Комментарии:
1. Какой пароль? Вы всегда можете его изменить.
2. спасибо за ответ, я использую этот pw: 01234567890 файл конфигурации находится здесь: github.com/ngxson/chatbot-cnh/blob/master/custom/const.js#L15 и строка подключения: mongodb srv://myuser:<01234567890>@cluster0-kuixy.gcp.mongodb.net/test ? Повторная запись = true
Ответ №1:
Попробуйте использовать этот подход —
var username = encodeURIComponent("YOUR_DATABASE_USERNAME");
var password = encodeURIComponent("YOUR_DATABASE_PASSWORD");
var connectionString = `mongodb://${username}:${password}@YOUR_CONNECTION_ENDPOINT`;
var databaseConnection = await MongoClient.connect(connectionString, {
ssl: true,
});
Ответ №2:
Ваша строка подключения не должна содержать символы <
и >
, если они не являются частью значения в строке (и если они есть, их, возможно, потребуется экранировать). В документации часто можно увидеть заполнители, окруженные этими символами, но при замене заполнителя вам также следует удалить эти символы.
Попробуйте изменить строку подключения на
mongodb srv://myuser:01234567890@host.gcp.mongodb.net/test?retryWrites=true
Как только вы подтвердите, что это работает, вам следует немедленно изменить свои учетные данные и любую другую реальную информацию базы данных, которую вы, возможно, разместили здесь.
Комментарии:
1. Как бы вы экранировали символ? Прочитав ваш ответ, я только что понял, что моя ошибка заключалась в том, что в моем пароле было
#
. Итак, как бы мне избежать#
? Спасибо2. @TheProCoder, я полагаю, что кодировка URL сработает.
#
стало бы#
.