Node.js Mongoose身份验证错误:命令find需要身份验证。但我做到了

Node.js Mongoose身份验证错误:命令find需要身份验证。但我做到了,node.js,mongodb,authentication,mongoose,Node.js,Mongodb,Authentication,Mongoose,我正在尝试查找一个我知道存在的文档,因为我可以在管理控制台中看到它,感谢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

我正在尝试查找一个我知道存在的文档,因为我可以在管理控制台中看到它,感谢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
-

-

最后我犯了这个错误

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)
MongoError:命令find需要身份验证
连接时。(/usr/src/app/node_modules/mongodb core/lib/Connection/pool.js:443:61)
在Connection.emit(events.js:189:13)
位于Connection.EventEmitter.emit(domain.js:441:20)
在processMessage(/usr/src/app/node_modules/mongodb core/lib/connection/connection.js:364:10)
在套接字上。(/usr/src/app/node_modules/mongodb core/lib/connection/connection.js:533:15)
在Socket.emit(events.js:189:13)
位于Socket.EventEmitter.emit(domain.js:441:20)
在addChunk(_stream_readable.js:284:12)
在readableAddChunk(_stream_readable.js:265:11)
在Socket.Readable.push(_stream_Readable.js:220:10)
在TCP.onStreamRead[as onread](internal/stream_base_commons.js:94:17)

答案简单而愚蠢。上面的所有内容都是正确的……请留待环境变量未定义


显然,mongo允许您在未经授权的情况下进行连接,您什么都做不了。正确填充那些环境变量,一切都进行得非常顺利。

不,我不能将连接字符串更改为
mongodb://${process.env.user}:${process.env.pass}@mongo:27017/Dailymals?authSource=admin
,然后它甚至一开始就没有连接。是的,当然,但我使用的是docker容器,所以对您来说可能会有所不同……您应该考虑为您的环境设置环境变量。这取决于您的环境,但大多数linux环境都可以在命令行或
~/.bashrc
中设置通过使用以下命令进行设置:
export user='someUserName'&&export pass='someUserPass'
-controllers/auth.js-
import { X } from "../models/auth"
//Promise wrapper
X.findOne( { id: incommingId }, ( 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)