Mongoose 5.0.16, Получение не может прочитать свойство 'replace' из undefined - PullRequest
0 голосов
/ 26 апреля 2018

Я создал новое приложение Node, Express, Mongo, но неожиданно я получаю эту ошибку с Mongoose при настройке MongoDB.

Server Listening to Port: 9001 
C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:130
username = username.replace('=', '=3D').replace(',', '=2C');
                   ^

TypeError: Невозможно прочитать свойство 'replace' из неопределенного

 at executeScram (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:130:24)
 at C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:299:7
 at _combinedTickCallback (internal/process/next_tick.js:73:7)
 at process._tickCallback (internal/process/next_tick.js:104:9) [nodemon] app crashed - waiting for file changes before starting...

Мой код для настройки MongoDB:

const session    = require('express-session');
const mongoose   = require('mongoose');
const mongoStore = require('connect-mongo')(session);

// Local connection
let mongoConnectionLocal = { 
    'url': `mongodb://${process.env.MongoDBLocalUser}:${process.env.MongoDBLocalPassword}@127.0.0.1:27017/my-database`
};    

mongoose.connect(mongoConnectionLocal.url, {auth:{authdb:"admin"}}, err => { if(err) { console.log(err); }});

Это так странно, потому чтоэтот код работает с Mongoose версии 4.13.2 и ниже (я попытался удалить версию 5.0.16, затем установил версию 4.13.2, и она работает без ошибок).Есть ли какие-либо изменения в реализации подключения MongoDB к Mongoose?

Обновление: Кто-то сказал, что используется значение по умолчанию, Использование значения по умолчанию создает эту ошибку:

 default: mongoose.connect(mongoConnectionLocal.url, err => { if(err) { console.log(err); }});

{ MongoError: Authentication failed.
at C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:598:61
at authenticateStragglers (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:516:16)
at Connection.messageHandler (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:552:5)
at emitMessageHandler (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\connection.js:309:10)
at Socket.<anonymous> (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\connection.js:452:17)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:551:20)
name: 'MongoError',
message: 'Authentication failed.',
ok: 0,
errmsg: 'Authentication failed.',
code: 18,
codeName: 'AuthenticationFailed' }
(node:20124) UnhandledPromiseRejectionWarning: Unhandled promise rejection 
(rejection id: 1): MongoError: Authentication failed.

1 Ответ

0 голосов
/ 07 мая 2018

Эта проблема была решена путем удаления имени пользователя и пароля в URI-адресе соединения

вместо установки этого способа подключения mongoose,

const session    = require('express-session');
const mongoose   = require('mongoose');
const mongoStore = require('connect-mongo')(session);

// Local connection
let mongoConnectionLocal = { 
    'url':`mongodb://${process.env.MongoDBLocalUser}:${process.env.MongoDBLocalPassword}@127.0.0.1:27017/my-database`
};    

mongoose.connect(mongoConnectionLocal.url, {auth:{authdb:"admin"}}, err => { if(err) { console.log(err); }});

Создайте параметр и задайте имя пользователя базы данных.и пароль там,

var options = {
  auth: {authdb: 'admin'},
  user: process.env.MongoDBLocalUser,
  pass: process.env.MongoDBLocalPassword,
}

let mongoConnectionLocal = { 
    'url': `mongodb://127.0.0.1:27017/my-database`
}; 

mongoose.connect(mongoConnectionOnline.url, options, err => { if(err) { console.log(err); }}); 

И это работает.

ПРИМЕЧАНИЕ. Кто-то сказал в комментарии, что я использую неверные учетные данные, но я использовал одни и те же учетные данные для более старой и более новой версии mongoose, и обе они работают.

Другие также испытывают эту проблему.См .: MongoDB Auth Не удается найти имя пользователя на изображении стека MEAN Bitnami

[Ссылка] https://github.com/Automattic/mongoose/issues/4891

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...