我正在开发一个 NestJS 应用程序,该应用程序使用 Mongoose 模块连接到 MongoDB 数据库。一切都工作正常,直到我遇到以下错误:
[Nest] 3372 - 08/24/2024, 9:32:12 PM ERROR [MongooseModule] Unable to connect to the database. Retrying (1)...
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
at _handleConnectionErrors (C:\Users\Tarek\Desktop\auth\my-app\node_modules\mongoose\lib\connection.js:897:11)
at NativeConnection.asPromise (C:\Users\Tarek\Desktop\auth\my-app\node_modules\mongoose\lib\connection.js:1360:11)
at C:\Users\Tarek\Desktop\auth\my-app\node_modules\@nestjs\mongoose\dist\mongoose-core.module.js:40:125
这是我的AppModule的相关部分:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { MongooseModule } from '@nestjs/mongoose';
import { UserSchema } from './auth/schemas/user.schema';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/MyApp'),
AuthModule,
// Other modules
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
我在本地运行 MongoDB,mongod 和 mongosh 都工作正常,没有任何问题。 我已确认 MongoDB 正在监听默认端口 27017。 应用程序连接失败,不断重试,但连接被拒绝。
我尝试过的:
验证 MongoDB 正在 localhost:27017 上运行。 检查防火墙和网络设置以确保连接未被阻止。 重新启动 MongoDB 服务。
问题:
可能导致连接拒绝的原因是什么?如何解决?我的 NestJS 或 Mongoose 配置中是否缺少某些内容?
问题是,mongo 可以在集群上运行,因此 mongo 驱动程序会尝试查找其他 mongo 实例。
Yoiu 可以在连接字符串中使用
?directConnection=true
来避免这种情况,就像这样
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/MyApp?directConnection=true'),
AuthModule,
// Other modules
],
controllers: [AppController],
providers: [AppService],
})
直接连接 指定客户端是否直接连接到连接 URI 中的主机[:端口]:
true:客户端仅向指定主机发送操作。它不会尝试发现副本集的任何其他成员。
false:客户端尝试发现副本集中的所有服务器,并向主成员发送操作。这是默认值。