如何在node.js中验证mongoose连接mongodb

Sai*_*fee 8 mongoose mongodb node.js

我用命令创建了mongodb用户

use admin
db.createUser(
    {
      user: "superuser",
      pwd: "12345678",
      roles: [ "root" ]
    }
)
Run Code Online (Sandbox Code Playgroud)

然后在我的应用程序中,我试图连接像这样的猫鼬

var options = {
user: "superuser",
pass: "12345678"
};


var mongooseConnectionString = 'mongodb://localhost/twitter-mongo';

mongoose.connect(mongooseConnectionString,options);
mongoose.model('User', UserSchema);

var User = mongoose.model('User');
Run Code Online (Sandbox Code Playgroud)

我通过mongoose插入数据时收到此错误

MongoError: not authorized for insert on twitter-mongo.users
Run Code Online (Sandbox Code Playgroud)

请告诉我我的代码有什么问题

Joe*_*yle 16

您必须在连接字符串中声明authSource参数,以指定包含用户凭据的数据库的名称:

var options = {
  user: "superuser",
  pass: "12345678",
  useMongoClient: true
};

var mongooseConnectionString = 'mongodb://localhost/twitter-mongo?authSource=admin';
Run Code Online (Sandbox Code Playgroud)

请注意,我还将"useMongoClient"设置为true.这使使用MongoClient.connect的身份验证与auth凭证open()被弃用的错误消息无效.


小智 7

这很好用:

var options = { server: { socketOptions: { keepAlive: 1 } } };
var connectionString = 'mongodb://admin:admin1234@localhost:27017/myDB';

 mongoose.connect(connectionString, options);

//Add those events to get more info about mongoose connection:

// Connected handler
mongoose.connection.on('connected', function (err) {
  console.log("Connected to DB using chain: " + connectionString);
});

// Error handler
mongoose.connection.on('error', function (err) {
  console.log(err);
});

// Reconnect when closed
mongoose.connection.on('disconnected', function () {
   self.connectToDatabase();
});
Run Code Online (Sandbox Code Playgroud)

  • 这似乎已被弃用. (5认同)