Ошибка: Пароль содержит недопустимый неэкранированный символ

#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 сработает. # стало бы # .