管理员未授权node.js mongoError执行命令

时间:2019-03-04 15:47:45

标签: javascript node.js mongodb

我正在研究Node.js,但我找不到任何解决方案。.我的控制台向我发送了很多消息,其中一个更特别奇怪:GET /注册--ms-- 有人对此有任何想法吗? 预先感谢!

///////////////////////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()

和控制台说:

  

端口3000(节点:7828)的服务端警告:弃用警告:   不推荐使用collection.ensureIndex。请改用createIndexes。   连接正常(节点:7828)UnhandledPromiseRejectionWarning:MongoError:   未经管理员授权执行命令{插入:“ system.indexes”,   文件:[[{ns admin.sessions} {键[{expires 1}]} {name expires_1}   {expireAfterSeconds 0} {unique false}]],命令: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)       在TLSSocket.emit(events.js:182:13)       在addChunk(_stream_visible.js:283:12)       在可读AddChunk(_stream_visible.js:264:11)       在TLSSocket.Readable.push(_stream_visible.js:219:10)       在TLSWrap.onStreamRead [读取时](internal / stream_base_commons.js:94:17)(node:7828)   UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个   由抛出异步函数引起的错误   没有障碍,或者拒绝了没有处理的承诺   使用.catch()。 (拒绝ID:1)(节点:7828)[DEP0018]   DeprecationWarning:已弃用未处理的承诺拒绝。在   未来,未处理的承诺拒绝将终止   使用非零退出代码的Node.js进程。 GET /登录--ms--GET   / login--ms--GET / login--ms--GET / signup--ms--

4 个答案:

答案 0 :(得分:6)

npm模块connect-mongo无法处理mongodb+srv://连接字符串。您必须使用以mongodb://开头的较旧的连接字符串类型。如果您使用的是MongoDB Atlas,我建议转到集群视图上的 connect ,然后连接应用程序,然后选择Node.js 2.2.12版,而不是3.0 。并且不要忘记在连接字符串中将数据库中的/test更改为/TheNameOfYourDatabase

答案 1 :(得分:4)

@ConstJS答案对我有用。扩大一点-

如果您使用的是Postman,并且您的错误如下所示:

  

“ errmsg”:“未经管理员授权执行命令{insert:[..]},$ db:\” admin \“}”

请注意以下特定部分:

  

$ db:\“ admin \”

您需要将其更改为您的数据库名称,因此请转到URI并找到

mongodb.net:27017/admin

并将管理员更改为您的数据库名称

答案 2 :(得分:0)

您似乎正在尝试访问MongoDB的管理数据库并插入不允许的内容。我假设您使用的连接字符串如下:

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

确保将/admin部分更新为要连接的数据库。

答案 3 :(得分:0)

此错误特定于以下事实:您传递的URL mongo-connect不知道如何处理。您可以传递mongoose.Connection对象并使用mongooseConnection选项对象中的MongoStore属性来代替URL。

new mongoStore({
  mongooseConnection: mongoose.connection,
  autoReconnect: true 
})

要使其正常工作,您需要先建立连接,然后将mongoose.connection对象传递给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');
    }
});

有更优雅的处理方式,但这应该可以帮助您入门。

相关问题