由于涉及到mongo的事务处理,我们的mongo服务需要开启副本集,但是开启之后发现数据库连不上了。
框架使用的是nestjs,由于compass能够连接,所以可以判断数据库运行正常,后来经过排查发现连接时需要在选项中添加一条:directConnection: true
完整的连接模块内容应该是:
import { Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { MongooseModule, MongooseModuleOptions } from "@nestjs/mongoose";
@Module({
imports: [
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: (config: ConfigService) => {
const mongooseOptions: MongooseModuleOptions = {
uri: config.get("MONGO_URI"),
dbName: config.get("MONGO_DB_NAME"),
user: config.get("MONGO_USER"),
pass: config.get("MONGO_PASS"),
authSource: config.get("MONGO_AUTH_SOURCE"),
directConnection: true,
};
return mongooseOptions;
},
inject: [ConfigService]
})
]
})
export class MongoConfigMoudle { }
为什么突然想起记录这个问题呢,因为今天在使用studio连接数据库时又遇到这个问题了,提示:getaddrinfo ENOTFOUND 352a3d9236e2
,查问题的时候都说是地址或者端口填错了,最后才发现有一个坑爹的选项