【问题标题】:Random error with Mongoose and Mongodb: Not authorized to execute commandMongoose 和 Mongodb 的随机错误:未授权执行命令
【发布时间】:2018-12-27 10:18:52
【问题描述】:

我的应用在 Mlab 的 MongoDB 上运行 NodeJS 9.5.0 和 mongoose 5.1.3。有时,我会收到not authorized to execute command,然后简单地重新启动节点进程即可解决此问题。有什么想法可能导致这种情况吗?

我的连接字符串:

// import environmental variables from our variables.env file
require('dotenv').config({ path: 'variables.env' });

// Connect to our Database and handle any bad connections
mongoose.connect(process.env.DATABASE);

在我的 variables.env 中(用户/密码/数据库编号已编辑):

DATABASE=mongodb://<DBUSER>:<DBPASS>@ds0000-a0.mlab.com:0000,ds000000-a1.mlab.com:00000/app?replicaSet=rs-ds00000

我似乎无法找出随机导致身份验证错误的原因。

【问题讨论】:

  • 您可以使用相同的变量从命令行连接吗? docs.mongodb.com/tutorials/connect-to-mongodb-shell
  • 我能够使用相同的凭据通过 MongoDB Compass 进行连接。凭据已验证,只是似乎不时进行身份验证。 shell登录会确认不同的东西吗? (数据库在 MLab 上)

标签: node.js mongodb mongoose mlab


【解决方案1】:

只是随机的,嗯。也许添加回调或承诺并捕获错误:

mongoose.connect(uri, options, function(error) {
  // Check error in initial connection. There is no 2nd param to the callback.
});

// Or using promises
mongoose.connect(uri, options).then(
  () => { /** ready to use. The `mongoose.connect()` promise resolves to 
  undefined. */ },
  err => { /** handle initial connection error */ }
);

来源:http://mongoosejs.com/docs/connections.html

【讨论】:

  • 我知道!这真的让我很烦。上次发生这种情况是在凌晨 3 点,我无法迅速恢复。我已经在处理如下的猫鼬连接错误:mongoose.connection.on('error', (err) => { console.error(err.message)};。我可以为重新启动节点应用程序的身份验证问题创建另一个吗?
  • 您遇到了什么错误?当应用程序启动时,您真的应该只连接到数据库一次。所以,我不确定你为什么要随机连接。您可以在发生错误时执行 process.exit,并使用 Forever 自动重新启动节点服务器。 npmjs.com/package/forever
  • 我实际上只在启动时连接一次。错误是用户无权执行命令,但在此之前(通过阅读 Mlab 的日志验证),所有命令都可以正常执行。几乎就好像在运行中,数据库连接的用户/密码发生了变化……这可能吗?我现在就试试process.exit 的建议,谢谢!
猜你喜欢
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
相关资源
最近更新 更多