我正在研究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--
答案 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');
}
});
有更优雅的处理方式,但这应该可以帮助您入门。