1

当我连接到 mongo atlas 时会发生此错误,但是当我使用本地数据库时它工作正常。查看数据库连接图像和终端错误以获取更多信息。

数据库连接.ts

import mongoose from "mongoose";

export default async function dbConnect() {

    if (mongoose.connection.readyState >= 1) {
        return;
    }

    return mongoose.connect(process.env.MONGO_URL as string, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useFindAndModify: false,
        useCreateIndex: true,
    });
}

这是我在下面遇到的错误

Top-level use of w, wtimeout, j, and fsync is deprecated. 
Use writeConcern instead.
(node:4052) Warning: Accessing non-existent property 'MongoError' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
Top-level use of w, wtimeout, j, and fsync is deprecated. Use writeConcern instead.
[next-auth][error][adapter_connection_error]
https://next-auth.js.org/errors#adapter_connection_error MongoError: Authentication failed.
    at MessageStream.messageHandler (C:\Users\Sebas\Documents\ProdCode\fitur\node_modules\mongodb\lib\cmap\connection.js:268:20)
    at MessageStream.emit (events.js:315:20)
    at processIncomingData (C:\Users\Sebas\Documents\ProdCode\fitur\node_modules\mongodb\lib\cmap\message_stream.js:144:12)
    at MessageStream._write (C:\Users\Sebas\Documents\ProdCode\fitur\node_modules\mongodb\lib\cmap\message_stream.js:42:5)
    at writeOrBuffer (internal/streams/writable.js:358:12)
    at MessageStream.Writable.write (internal/streams/writable.js:303:10)
    at TLSSocket.ondata (internal/streams/readable.js:719:22)
    at TLSSocket.emit (events.js:315:20)
    at addChunk (internal/streams/readable.js:309:12)
    at readableAddChunk (internal/streams/readable.js:284:9)
    at TLSSocket.Readable.push (internal/streams/readable.js:223:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:188:23) {
  ok: 0,
  code: 8000,
  codeName: 'AtlasError'
}
[next-auth][error][session_error]
https://next-auth.js.org/errors#session_error TypeError: Cannot destructure property 'manager' of 'connection' as it is null.
4

1 回答 1

0

您可以在console.log(process.env.MONGO_URL)内部检查function dbConnect()以查看它是否未定义。

这是因为我对同样的错误消息有同样的问题

MongoError:身份验证失败

dotenvapp.js文件中需要,但是当应用程序启动时,它将以bin/www文件开头。所以我把下面的代码放在bin/www文件中。

// Config
require('dotenv').config({
  path: './config/keys.env'
})

dbConnection.js文件中,

// Connecting database
module.exports.connectDB = async () => {
  try {
    await mongoose
      .connect(process.env.MONGODB_URL, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useFindAndModify: false,
        useCreateIndex: true,
      })
      .then(() => console.log("MongoDB connected..."));
  } catch (err) {
    console.error(err);
  }
};

令人惊讶的是,在那之后一切对我来说都很好。

所以你应该先检查。如果未定义,则表示您的env文件在bdConnect()执行后处理。

于 2021-06-24T08:16:45.837 回答