Mongoose6+TypeScript+Express运行报No overload matches this call错误如何解决
问题原因
Mongoose 6.x版本对连接配置做了不兼容调整,你传入的三个配置项已经被废弃:
useNewUrlParser、useUnifiedTopology、useCreateIndex在6.x版本中默认全部开启,不需要手动配置- 官方已经从TS类型定义
ConnectOptions中移除了这三个属性,传入不存在的属性就会触发类型不匹配的报错
解决方案
推荐方案:移除过时配置
直接删除mongoose.connect的第二个配置参数即可,功能和你之前手动传参的效果完全一致,修改后的代码如下:
const start = async () => { try { // 移除所有过时配置项 await mongoose.connect("mongodb://auth-mongo-srv:27017/auth"); console.log("Connected to MongoDb"); } catch (err) { console.error(err); } };
临时兼容方案(不推荐长期使用)
如果需要保留旧代码不想修改,可以通过类型断言跳过TS校验:
await mongoose.connect("mongodb://auth-mongo-srv:27017/auth", { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, } as mongoose.ConnectOptions);
Docker部署MongoDB额外注意事项
- 确认K8s集群内服务发现正常,
auth-mongo-srv服务名可以正确解析到MongoDB Pod的IP - 确认MongoDB Service已经正确暴露27017端口,没有网络策略拦截服务之间的访问
- 如果MongoDB开启了身份认证,需要在连接URI中补充认证信息,格式为
mongodb://用户名:密码@auth-mongo-srv:27017/auth?authSource=admin
内容的提问来源于stack exchange,提问作者Shiladitya Thakur
相关产品推荐
相关产品推荐

