2
votes

Comment connecter NodeJs à un cluster Atlas Mongodb

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


2 commentaires

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 une Promise , vous pouvez donc faire Mongoclient.connect (uriString) .then (.. code ..). Catch (err => console.error (err)); Ou même utilisez async / await sauf 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.


3 Réponses :


-1
votes

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

entrez la description de l'image ici

Sélectionnez Connecter votre application à partir de la fenêtre suivante

 entrez la description de l'image ici

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

 entrez la description de l'image ici

Maintenant, copiez le code et utilisez-le directement.


3 commentaires

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



0
votes

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


0 commentaires

0
votes

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.


0 commentaires