web-dev-qa-db-fra.com

MongoDB - Erreur: schéma non valide, prévu mongodb

Je suis nouveau dans l'application de construction avec MEAN Stack, j'essaye de construire une application de chat en temps réel, voici mon côté serveur:

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);
});

});

});

Je suis sûr que j'ai créé une base de données appelée chat avec mongodb, qui est également en attente de connexion. Mais lorsque je lance le serveur avec le noeud server.js, une erreur se produit:

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>

J'avais été bloqué à cette phase pendant des semaines, est-ce que quelqu'un pourrait m'aider?

Merci.

35
Ahmed202

Cela est dû au fait que vous utilisez la chaîne de connexion dans un format incorrect.

Vous utilisez localhost:27017/db/chat alors que ça devrait être mongodb://localhost:27017/db/chat

Le modèle pour la chaîne de connexion est mongodb://<HOSTNAME>:<PORT>/<DBNAME>

Article de référence: https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html#mongoclient-connect

110
Jonathan Muller

Je viens d'avoir ce problème aussi et c'est parce que j'ai eu le mauvais protocole:

mongo://localhost:27017/test

Le protocole étant incorrect peut également provoquer cette erreur. Cela devrait être comme ça:

mongodb://localhost:27017/test
6
Mike Cheel

Parfois, les guillemets autour des variables d’environnement peuvent présenter une erreur. Supprimez-les une fois et essayez. Pourrait aider.

L'erreur pourrait être avec:

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

La commande correcte sera:

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

Essayez ceci, ça marche:

mongoose.connect('mongodb://localhost:27017/shopping');
2
Mukolo Patrick Ejiro

Je viens de comprendre le même problème. Les fenêtres maudites sauvent des guillemets dans l'environnement.

Donc, si vous utilisez Windows et écrivez de cette façon SET MONGO_URL="mongodb://localhost:27017/{name of your db}" Ce n'est pas correct.

La bonne façon est SET MONGO_URL=mongodb://localhost:27017/{name of your db} sans citations.

Aussi, j'ai découvert que vous devez écrire le protocole exactement - Mongodb. Il y a du code qui vérifie le protocole du fichier url_parser.js

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

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

Cela peut sembler évident, mais vous rencontrerez également cette erreur lorsque vous transmettez généralement des valeurs non valides au client Mongo, par exemple. undefined. A couru dans ceci quand je faisais référence à la mauvaise clé sur un objet config.

0
Adam Reis

Changer le contenu de cette ligne à partir de

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

à

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

Ensuite, vous pouvez connecter la base de données MongoDB avec succès.

0
Jerry Chong

le code de travail serait comme ça

n'oubliez pas de remplacer 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);
        });


    });

});
0
Jamil Noyda