6
votes

node.js mongoError n'est pas autorisé sur l'administrateur à exécuter la commande

J'étudie Node.js et je ne trouve aucune solution .. ma console m'envoie beaucoup de messages dont un est plus particulièrement étrange: GET / signup - - ms - - quelqu'un a une idée à ce sujet? Merci d'avance!

///////////////////////inclusion des librairies
 // 3 librairies pour gérer les messages flash
 var session = require('express-session');
 var cookieParser = require('cookie-parser');
 var flash = require('express-flash');
 //passerelle pour se connecter à node(node->bdd)
 var passport =require('passport');
 // stockage des sessions(id) et cookies côté serveur uniquement
 var mongoStore =require('connect-mongo')(session); // le session de express-session

//inclure al librairie  express
 var express = require('express');
// Inclusion de la librairie morgan (faire le lien avec la base de données)
var morgan = require('morgan');

// Inclusion de mongoose
 var mongoose = require('mongoose');

 //Inclusion moteur templates ejs
 var ejs = require('ejs');
  var engine =require('ejs-mate');
  // Inclusion de body parser pour les données des formulaires
  var bodyParser = require('body-parser');



  /////////////////////fin des librairies ///////////////

// stocker l'objet express dans une variable plus courte
 
 var app = express();



//inclure le fichier secret.js
var secret = require('./config/secret');
 ////////////connexion à la bd avec mongoose///
 
 mongoose.connect(secret.database, // voir pour création de db en ligne !!
 	{useNewUrlParser:true},
 	function(err){
 		if(err){console.log(err)
 		}else{
 			console.log('connexion OK');
 		}
 	});


/////////////////// gestion des Passerelles (middleware)/////////////////////////
app.use(express.static(__dirname + '/public')); // pour le style
app.use(morgan('dev'));
app.engine('ejs',engine);
app.set('view engine','ejs');
// les deux lignes ci-dessous pour récupérer les données des formulaires
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
// affichage messages flash et gestion des cookies
app.use(cookieParser());
app.use(session({
	resave :true,
	saveUninitialized:true,
	secret :secret.secretKey,
	store : new mongoStore({
		url:secret.database,
		autoReconnect:true })
}));

app.use(flash());

//authentification
app.use(passport.initialize());
app.use(passport.session());


////////////////définition du chemin des pages principales////////////////////////

var mainRoutes =require('./routes/main');
app.use(mainRoutes);

var userRoutes =require('./routes/user');
app.use(userRoutes);



//app.post()

//app.put()

//app.delete()

ET LA CONSOLE DIT:

Le serveur est lancé sur le port3000 (nœud: 7828) DeprecationWarning: collection.ensureIndex est obsolète. Utilisez plutôt createIndexes. connexion OK (nœud: 7828) UnhandledPromiseRejectionWarning: MongoError: non autorisé par l'administrateur à exécuter la commande {insert: "system.indexes", documents: [[{ns admin.sessions} {key [{expires 1}]} {name expires_1} {expireAfterSeconds 0} {unique false}]], ordonné: true} à Function.MongoError.create (C: \ Users \ Utilisateur \ Desktop \ NODE \ ECommerce \ node_modules \ connect-mongo \ node_modules \ mongodb-core \ lib \ error.js: 31: 11) à C: \ Users \ Utilisateur \ Desktop \ NODE \ ECommerce \ node_modules \ connect-mongo \ node_modules \ mongodb-core \ lib \ connection \ pool.js: 497: 72 à authenticateStragglers (C: \ Users \ Utilisateur \ Desktop \ NODE \ ECommerce \ node_modules \ connect-mongo \ node_modules \ mongodb-core \ lib \ connection \ pool.js: 443: 16) à Connection.messageHandler (C: \ Users \ Utilisateur \ Desktop \ NODE \ ECommerce \ node_modules \ connect-mongo \ node_modules \ mongodb-core \ lib \ connection \ pool.js: 477: 5) à TLSSocket. (C: \ Users \ Utilisateur \ Desktop \ NODE \ ECommerce \ node_modules \ connect-mongo \ node_modules \ mongodb-core \ lib \ connection \ connection.js: 333: 22) sur TLSSocket.emit (events.js: 182: 13) à addChunk (_stream_readable.js: 283: 12) à readableAddChunk (_stream_readable.js: 264: 11) à TLSSocket.Readable.push (_stream_readable.js: 219: 10) à TLSWrap.onStreamRead [en lecture] (interne / stream_base_commons.js: 94: 17) (nœud: 7828) UnhandledPromiseRejectionWarning: Rejet de promesse non géré. Ce erreur provenant soit en jetant à l'intérieur d'une fonction asynchrone sans bloc catch, ou en rejetant une promesse qui n'a pas été gérée avec .catch (). (ID de rejet: 1) (nœud: 7828) [DEP0018] DeprecationWarning: les rejets de promesses non gérées sont obsolètes. Dans l'avenir, les refus de promesse qui ne sont pas traités mettront fin au Processus Node.js avec un code de sortie différent de zéro. GET / login - - ms - - GET / login - - ms - - GET / login - - ms - - GET / signup - - ms - -


0 commentaires

4 Réponses :


0
votes

Il semble que vous essayez d'accéder à la base de données d'administration de MongoDB et d'insérer quelque chose qui n'est pas autorisé. Je suppose que vous utilisez une chaîne de connexion comme:

mongodb://mongodb0.example.com:27017/admin

Assurez-vous de mettre à jour l'élément / admin vers la base de données à laquelle vous souhaitez vous connecter.


2 commentaires

Salut Nick, merci pour ta réponse. J'utilise ce type de connexion pour mongodb Atlas: mongodb + srv: // root: @ cluster0-zfgku.mongodb.net / tes‌ t? RetryWrites = true. Je peux ajouter un utilisateur, mais pas d'identifiant de session, c'est étrange. Peut-être qu'il y a un problème avec la bibliothèque "connect-mongo"?


Si vous pouvez accéder à la base de données pour enregistrer un utilisateur, la connexion est correcte. Je pense que votre problème est lié au fait de ne pas passer la connexion Mongoose à la session. Je pense que vous voudrez peut-être envisager de réutiliser votre connexion. Regardez la section "Réutiliser une connexion Mongoose" ici: npmjs.com/package/connect- mongo



23
votes

Le module npm connect-mongo ne peut pas gérer les chaînes de connexion mongodb + srv: // . Vous devrez utiliser les anciens types de chaînes de connexion qui commencent par mongodb: // .

Si vous utilisez MongoDB Atlas, je vous recommande d'aller à connecter sur la vue du cluster, puis de connecter votre application , puis de sélectionner Node.js version 2.2. 12, pas 3.0 .

Vous devrez probablement également changer le / test ou / admin dans votre chaîne de connexion en / TheNameOfYourDatabase avec le nom de votre base de données. (Voir la réponse de radihuq ci-dessous)


6 commentaires

Réservoirs beaucoup ConstJS! Je n'ai pas vu votre asweer avant maintenant. tout fonctionne bien !! Merci encore :)


Heureux que cela ait fonctionné! @cessother Pourriez-vous s'il vous plaît marquer comme réponse? :)


Je le ferai avec plaisir, mais j'ai encore une question: comment faire pour marquer comme réponse? :)


Cliquez sur la coche à côté de la réponse pour la faire passer de grisé à remplie. Cela la marque comme une réponse :)


essayé de résoudre ce problème depuis toujours, cela a finalement fonctionné. Je vous remercie. Pour aider les autres - cela apparaît également comme: MongoError: Impossible de faire des requêtes brutes sur l'administrateur dans l'atlas


Cela a fonctionné pour moi en passant simplement à la version 2.2.12



0
votes

Cette erreur est spécifique au fait que vous passez une url mongo-connect ne sait pas comment gérer. Au lieu de l'URL, vous pouvez transmettre l'objet mongoose.Connection et utiliser la propriété mongooseConnection dans l'objet d'options MongoStore .

 mongoose.connect(secret.database, {useNewUrlParser:true}, function(err) {
    if(err) { 
      console.log(err)
    } else {
      app.use(session({
        resave :true,
        saveUninitialized:true,
        secret :secret.secretKey,
        store : new mongoStore({
          url:secret.database,
          autoReconnect:true })
      }));
      console.log('connexion OK');
    }
});


0 commentaires

4
votes

La réponse @ConstJS a fonctionné pour moi. Développer un peu -

Si vous utilisez Postman et que votre erreur ressemble à ceci:

"errmsg": "non autorisé par l'administrateur à exécuter la commande {insert: [..]}, $ db: \" admin \ "}"

Notez cette partie spécifique:

$ db: \ "admin \"

Vous voudrez changer cela en votre nom de base de données alors allez dans votre URI et trouvez

mongodb.net:27017/admin

et changez admin par le nom de votre base de données p >


2 commentaires

Cela devrait également être une réponse acceptée. Merci @Taslim


Merci, j'ai mis à jour la réponse et ajouté une référence à votre réponse dans ma réponse ci-dessus :)