Mongoose身份验证错误:命令“find”需要进行身份验证。 但是我已经进行了身份验证

3

我正在尝试查找一份文件,因为我可以通过mongo-express在管理控制台中看到它...但是当我使用Model.findOne()时,它抛出以下错误消息。我做错了什么?(主机名“mongo”是我的docker容器,并且连接正常,我可以在日志中看到它)

这是我的代码:

// This all works because the following events show success, and no error.
// So I know it's authing correctly on initial connection
-dbConnect.js-
"user strict"

import mongoose from "mongoose"

const connection = mongoose.createConnection( 
"mongodb://mongo:27017/dbName?authSource=admin", {
              useNewUrlParser: true,
              user: process.env.user,
              pass: process.env.pass,
              keepAlive: true,
            })
connection.on( "connected", () => {
  console.log( "MONGOOSE: connected" )  
})

connection.on( "close", () => {
  console.log( "MONGOOSE: connection close" )  
})

connection.on( "error", error => {
  console.log( "MONGOOSE: connection error", error )  
})

export default connection
-models/auth.js-
"use strict"

import mongoose from "mongoose"
import connection from "../dbConnect"
 
const xSchema = new mongoose.Schema(
  {
    id    : String,
    user  : String,
    pass  : String
  },
  { collection: "x" }
)
export const X = connection.model( "X", xSchema )
-controllers/auth.js-
import { X } from "../models/auth"
//Promise wrapper
X.findOne( { id: incomingId }, ( error, x ) => {
  //handler
})

我最后遇到了这个错误

MongoError: command find requires authentication
    at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:443:61)
    at Connection.emit (events.js:189:13)
    at Connection.EventEmitter.emit (domain.js:441:20)
    at processMessage (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:364:10)
    at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:533:15)
    at Socket.emit (events.js:189:13)
    at Socket.EventEmitter.emit (domain.js:441:20)
    at addChunk (_stream_readable.js:284:12)
    at readableAddChunk (_stream_readable.js:265:11)
    at Socket.Readable.push (_stream_readable.js:220:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

不,我不能只更改连接字符串为mongodb://${process.env.user}:${process.env.pass}@mongo:27017/dailymeals?authSource=admin,这样它甚至最初都无法连接。 - Eric Hodonsky
1个回答

2

最初的回答很简单也很愚蠢。上面的所有内容都是正确的...除了环境变量未定义。

显然,Mongo允许您在未经授权的情况下连接,但您无法执行任何操作。正确填写这些环境变量后,一切都顺利进行。


好的,但我使用的是Docker容器,所以你的情况可能不同... 你应该研究一下如何为你的环境设置环境变量。这取决于你的环境,但在大多数Linux环境中,你可以通过命令行或者~/.bashrc文件来设置,方法如下:export user='someUserName' && export pass='someUserPass' - Eric Hodonsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接