使用Deno与mongo@v0.31.1连接Mongo Atlas失败求助
Deno连接Mongo Atlas报错:"Could not find a master node"问题解决
问题详情
Deno应用无法连接Mongo Atlas,此前功能正常,已检查网络访问配置。
代码示例
import { dotEnvConfig, MongoClient } from "../deps.ts"; const configData = await dotEnvConfig(); const { MONGO_USER_NAME, MONGO_USER_PASSWORD, MONGO_HOSTNAME, MONGO_PORT } = configData; const client = new MongoClient(); // Connecting to a Mongo Atlas Database await client.connect({ db: "dip", tls: true, servers: [ { host: MONGO_HOSTNAME, port: 27017, }, ], credential: { username: MONGO_USER_NAME, password: MONGO_USER_PASSWORD, db: "dip", mechanism: "SCRAM-SHA-1", }, }); const db = client.database("dip"); export default db;
报错信息
error: Uncaught (in promise) Error: MongoError: "Connection failed: Could not find a master node" throw new MongoDriverError(`Connection failed: ${e.message || e}`); ^ at MongoClient.connect (https://deno.land/x/mongo@v0.31.1/src/client.ts:46:13) at async file:///E:/webstuff/deno/db/mongodb.ts:12:1
解决建议
改用Mongo Atlas官方连接字符串
Atlas是集群部署,手动指定单个节点无法正确发现主节点。直接使用Atlas控制台提供的mongodb+srv://格式连接字符串,简化配置:await client.connect(`mongodb+srv://${MONGO_USER_NAME}:${MONGO_USER_PASSWORD}@${MONGO_HOSTNAME}/dip?authSource=admin&tls=true`);注意:
MONGO_HOSTNAME需填写Atlas集群的完整域名(如cluster0.abc123.mongodb.net),而非单个节点地址。更新认证机制
当前代码使用SCRAM-SHA-1,而Atlas默认已切换为SCRAM-SHA-256,手动配置时需修改credential中的mechanism:credential: { // ...其他配置 mechanism: "SCRAM-SHA-256", }升级deno/mongo依赖版本
使用的v0.31.1版本较老旧,可能存在集群兼容性问题,建议升级到最新稳定版,更新deps.ts中的导入路径。验证环境变量准确性
确认MONGO_HOSTNAME是集群完整域名,密码若包含特殊字符需在.env中正确转义或做URI编码。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

