Je suis en train de configurer une nouvelle application en utilisant une base de données Atlas avec un nœud et tout ce que j'obtiens est une erreur disant "MongoError: MongoClient doit être connecté avant d'appeler MongoClient.prototype.db".
const uri = "mongodb+srv://alberto:pass@lel-kicis.mongodb.net/test";
const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect(err => {
const collection = client.db("test").collection("students")
.then(db => console.log('DB conectada'))
.catch(err => console.log(error));
});
3 Réponses :
Il vous manque pour lancer le client mongo.
const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb+srv://alberto:pass@lel-kicis.mongodb.net/test";
const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect(err => {
const collection = client.db("test").collection("students")
.then(db => console.log('DB conectada'))
.catch(err => console.log(error));
});
De plus, Atlas génère le bloc de code de connexion initial pour vous. Suivez les étapes ci-dessous.
Cliquez sur le bouton de connexion
Sélectionnez Connecter votre application à partir de la fenêtre suivante
Dans la fenêtre suivante, sélectionnez NodeJs comme pilote et sélectionnez la version requise. Sélectionnez également l'exemple de pilote complet pour le bloc de code complet
Maintenant, copiez le code et utilisez-le directement.
Je l'ai déjà fait et cela n'a pas fonctionné
Avez-vous fourni le mot de passe correct dans la chaîne de connexion?
J'ai vérifié à nouveau et oui, c'est correct
Si vous regardez la documentation du connecteur mongodb , la syntaxe de MongoClient est new MongoClient (url, options, callback) . La signature du rappel est (err, client) => {// body} .
Si vous ne transmettez pas le rappel facultatif, vous obtenez une instance de MongoClient (ce qui est le cas ici). La méthode connect attend également la même signature de rappel, donc votre connexion doit être comme:
// connection is a promise
const connection = instance.connect()
connection.then((err, client) => { // etc })
mongodb connecteur prend également en charge promis, vous pouvez donc aussi faire:
const instance = new MongoClient(uri, { useNewUrlParser: true });
// notice 'client' in the callback
instance.connect((err, client) => {
if (err) console.log('failed to connect')
else {
console.log('connected')
const collection = client.db("test").collection("students")
...
}
});
Utilisation de mongoose et mongodb-uri:
Voici comment j'initialise la connexion:
const mongoose = require('mongoose')
const uriUtil = require('mongodb-uri')
// Create a new connection
mongoose.Promise = global.Promise
// mongoose.set('debug', DEBUG)
const dbURI = uriUtil.formatMongoose(process.env.MONGO_URI)
const options = {
autoIndex: DEBUG,
autoReconnect: true,
useNewUrlParser: true
}
const conn = mongoose.createConnection(dbURI, options)
conn.on('open', () => console.log('DB connection open'))
conn.on('error', err => console.log(`DB connection error : ${err.message}`, err))
conn.on('close', () => console.log('DB connection closed'))
module.exports = conn
Utilisation de la chaîne de connexion fournie par mongoDb pour la version du pilote node.js 3.0 ou version ultérieure.
Vous n'avez pas vérifié
err. Il y a probablement eu une erreur qui est ignorée, et probablement en raison d'un problème d'authentification ou d'un hôte inaccessible.MongoClient.connect ()est également la méthode préférée et recommandée. Il renvoie unePromise, vous pouvez donc faireMongoclient.connect (uriString) .then (.. code ..). Catch (err => console.error (err)); code> Ou même utilisezasync / awaitsauf si votre NodeJS est plus ancien que la version 8.Plus précisément, consultez cette réponse pour un exemple d'utilisation valide. Sauf pour le
client.close (), qui est quelque chose que votre application devrait probablement jamais appeler. Nous ne montrons généralement cela que pour de courtes "exemples" d'annonces.