You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS连接MongoDB报MongooseServerSelectionError的排查与解决

NestJS + Mongoose 连接MongoDB失败:ECONNREFUSED ::1:27017

错误信息

[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服务

问题

连接被拒绝的可能原因是什么?该如何解决?NestJS或Mongoose配置是否有遗漏?


解决方法

1. 替换localhost为127.0.0.1

错误显示连接的是::1:27017(IPv6本地地址),可能是系统对localhost的解析优先走IPv6,但MongoDB仅监听了IPv4地址。修改连接字符串为:

MongooseModule.forRoot('mongodb://127.0.0.1:27017/MyApp')

强制使用IPv4连接,避免解析冲突。

2. 检查MongoDB绑定地址配置

打开MongoDB配置文件(如mongod.cfg),找到net.bindIp项,确认其设置为127.0.0.1或0.0.0.0(允许所有IP访问),而非仅绑定特定IPv6地址。若之前修改过该配置,可能导致仅能通过特定IP连接。

3. 验证版本兼容性

检查@nestjs/mongoose与Mongoose核心版本是否匹配。版本不兼容可能引发连接逻辑异常。可通过npm list mongoose查看版本,必要时升级/降级到兼容版本(例如@nestjs/mongoose 10.x对应mongoose 7.x或8.x)。

4. 强制使用IPv4连接选项

若替换地址无效,可在连接配置中强制禁用IPv6:

MongooseModule.forRoot('mongodb://localhost:27017/MyApp', {
  family: 4 // 强制使用IPv4协议
})

5. 排查环境变量干扰

确认项目中是否存在环境变量(如MONGODB_URI)覆盖了代码中的连接字符串。例如.env文件若配置了其他地址,会导致实际连接地址与代码不一致。


内容的提问来源于stack exchange,提问作者Tarek Ziad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:12:25