我创建了一个新的Node,Express,Mongo应用程序,但设置MongoDB时突然出现了Mongoose错误。
Server Listening to Port: 9001
C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:130
username = username.replace('=', '=3D').replace(',', '=2C');
^
TypeError:无法读取未定义的属性“替换”
at executeScram (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:130:24)
at C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:299:7
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9) [nodemon] app crashed - waiting for file changes before starting...
我设置MongoDB的代码是:
const session = require('express-session');
const mongoose = require('mongoose');
const mongoStore = require('connect-mongo')(session);
// Local connection
let mongoConnectionLocal = {
'url': `mongodb://${process.env.MongoDBLocalUser}:${process.env.MongoDBLocalPassword}@127.0.0.1:27017/my-database`
};
mongoose.connect(mongoConnectionLocal.url, {auth:{authdb:"admin"}}, err => { if(err) { console.log(err); }});
这太奇怪了,因为此代码可用于Mongoose 4.13.2及更低版本(我尝试卸载5.0.16版,然后安装4.13.2版,并且没有错误)。在实现与Mongoose的MongoDB连接方面是否有任何变化?
更新:有人说使用默认值,使用默认值会产生此错误:
default: mongoose.connect(mongoConnectionLocal.url, err => { if(err) { console.log(err); }});
{ MongoError: Authentication failed.
at C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:598:61
at authenticateStragglers (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:516:16)
at Connection.messageHandler (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:552:5)
at emitMessageHandler (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\connection.js:309:10)
at Socket.<anonymous> (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\connection.js:452:17)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:551:20)
name: 'MongoError',
message: 'Authentication failed.',
ok: 0,
errmsg: 'Authentication failed.',
code: 18,
codeName: 'AuthenticationFailed' }
(node:20124) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 1): MongoError: Authentication failed.
通过删除连接URI中的用户名和密码已解决此问题
而不是这样建立猫鼬连接,
const session = require('express-session');
const mongoose = require('mongoose');
const mongoStore = require('connect-mongo')(session);
// Local connection
let mongoConnectionLocal = {
'url':`mongodb://${process.env.MongoDBLocalUser}:${process.env.MongoDBLocalPassword}@127.0.0.1:27017/my-database`
};
mongoose.connect(mongoConnectionLocal.url, {auth:{authdb:"admin"}}, err => { if(err) { console.log(err); }});
创建一个选项并在那里设置数据库用户名和密码,
var options = {
auth: {authdb: 'admin'},
user: process.env.MongoDBLocalUser,
pass: process.env.MongoDBLocalPassword,
}
let mongoConnectionLocal = {
'url': `mongodb://127.0.0.1:27017/my-database`
};
mongoose.connect(mongoConnectionOnline.url, options, err => { if(err) { console.log(err); }});
而且有效。
注意:有人在评论中说我使用了错误的凭据,但是我对旧版本和较新版本的猫鼬使用了相同的凭据,并且两者均有效。
其他人也遇到此问题。请参阅:MongoDB Auth未能在Bitnami MEAN Stack Image上找到用户名
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句