mongoose - 为什么 next-auth 给出 TypeError 无法解构“连接”的属性“管理器”,因为它为空?
问题描述
当我连接到 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.
解决方案
您可以在console.log(process.env.MONGO_URL)
内部检查function dbConnect()
以查看它是否未定义。
这是因为我对同样的错误消息有同样的问题
MongoError:身份验证失败
我dotenv
在app.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()
执行后处理。
推荐阅读
- facebook - 不使用 Facebook Login 登录多个网站的 Facebook 网站应用
- outlook-addin - 适用于 MAC 的 OnSend 的可用性?
- python-3.x - 如何获得熊猫的每日平均测量值
- documentation - 带有函数签名的 pyomo 文档
- r - 使用 ggplot() 在边框中重新创建 visreg() 数据刻度
- c# - Razor 复选框在 ASP.Net Core 2.2 MVC 中总是返回 false
- azure - 为什么这个用于使用 csv 文件中的标签标记 Azure VM 的 powershell 脚本会失败?
- java - 如何将 Guava 的“Sets.combinations”转换为可用的对象类型?
- react-intl - react-intl 可以为某些数字类复数一个完全不同的消息吗?
- .htaccess - 当旧域有参数时,将 url 重定向到新的子域