Подтвердить что ты не робот

MongoDB - Ошибка: неверная схема, ожидаемый mongodb

Я новичок в создании приложений с помощью MEAN Stack, я пытаюсь создать приложение для чата в реальном времени, вот моя серверная часть:

console.log("Server running...!");

var mongo=require('mongodb').MongoClient;
var client=require('socket.io').listen(8080).sockets;

mongo.connect('localhost:27017/db/chat',function(err,db){
if(err)  throw err;

client.on('connection',function(socket){
console.log('someone has connected !');

//waiting for input
socket.on('input',function(data){
console.log(data);
});

});

});

Я уверен, что создал базу данных под названием chat с mongodb, также mongo ждет соединения. Но когда я запускаю сервер с узлом server.js, возникает ошибка:

Server running...!
C:\Users\azus\Desktop\Psirt\codemaster\node_modules\ mongodb\lib\url_parser.js:20
  throw new Error('invalid schema, expected mongodb');
  ^

Error: invalid schema, expected mongodb
at module.exports (C:\Users\azus\Desktop\Psirt\code-master\node_modules\mong
 odb\lib\url_parser.js:20:11)
at connect (C:\Users\azus\Desktop\Psirt\code-master\node_modules\mongodb\lib
 \mongo_client.js:125:16)
at Function.MongoClient.connect (C:\Users\azus\Desktop\Psirt\code-master\nod
e_modules\mongodb\lib\mongo_client.js:109:3)
at Object.<anonymous> (C:\Users\azus\Desktop\Psirt\code-master\server.js:6:8
)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:139:18)

C:\Users\azus\Desktop\Psirt\code-master>

Я был заблокирован на этом этапе в течение нескольких недель, кто-нибудь может помочь в этом?

Благодарю.

4b9b3361

Ответ 1

Это потому, что вы используете строку подключения в неправильном формате.

Вы используете localhost:27017/db/chat то время как он должен быть mongodb://localhost:27017/db/chat

Шаблон для строки mongodb://<HOSTNAME>:<PORT>/<DBNAME>

Статья для справки: https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html#mongoclient-connect

Ответ 2

У меня тоже была эта проблема, и это было из-за неправильного протокола:

mongo://localhost:27017/test

Неправильный протокол также может вызвать эту ошибку. Это должно быть так:

mongodb://localhost:27017/test

Ответ 3

Иногда ошибка может быть связана с кавычками вокруг переменных окружения. Удалите их один раз и попробуйте. Могу помочь.

Ошибка может быть:

 set DATABASE_URI='mongodb://localhost:1000/my_app' && node index.js

Правильная команда будет:

  set DATABASE_URI=mongodb://localhost:1000/my_app && node index.js

Ответ 4

Попробуйте это, это работает:

mongoose.connect('mongodb://localhost:27017/shopping');

Ответ 5

Может показаться очевидным, но вы также столкнетесь с этой ошибкой, когда вы передадите недопустимые значения в общем случае клиенту mongo, например. undefined. В этом случае, когда я ссылался на неправильный ключ в объекте config.

Ответ 6

Просто разобрался в той же проблеме. Проклятые окна сохраняют цитаты в среде.

Поэтому, если вы используете Windows и написали таким образом, SET MONGO_URL="mongodb://localhost:27017/{name of your db}" Это неверно.

Правильный путь: SET MONGO_URL=mongodb://localhost:27017/{name of your db} без кавычек.

Также я обнаружил, что вы должны написать протокол точно - mongodb. Есть код, который проверяют протокол из файла url_parser.js

var result = parser.parse(url, true);

if(result.protocol != 'mongodb:') {
    throw new Error('invalid schema, expected mongodb');
}

Ответ 7

Изменить содержание этой строки с

mongo.connect('localhost:27017/db/chat',function(err,db)

в

mongo.connect('mongodb://localhost:27017/db/chat',function(err,db)

Затем вы можете успешно подключить базу данных MongoDB.

Ответ 8

рабочий код будет таким

не забудьте заменить username, password и URL

const socketClient = require('socket.io').listen(4000).sockets;
const MongoClient = require('mongodb').MongoClient;

const uri = "mongodb+srv://<username>:<password>@cluster0-saugt.mongodb.net/test?retryWrites=true&w=majority";

const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect(err => {
    socketClient.on('connection', function (socket) {

        //Need to Get the Database first before trying to access the collections.
        let chat = client.db("test").collection('chats');

        // Get chats from mongo collection
        // perform actions on the collection object
        chat.find().limit(100).sort({ _id: 1 }).toArray(function (err, res) {
            if (err) {
                throw err;
            }

            // Emit the messages
            socket.emit('output', res);
        });


    });

});