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.
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
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
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
Essayez ceci, ça marche:
mongoose.connect('mongodb://localhost:27017/shopping');
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');
}
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.
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.
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);
});
});
});