无法通过Node.js MongoDB驱动连接Cosmos DB模拟器
Cosmos DB模拟器Node.js MongoDB驱动连接失败排查求助
问题背景
- 此前同配置的复杂应用可正常连接本地Cosmos DB模拟器,现在新建测试应用(使用MongoDB驱动)连接失败,官方CosmosClient示例也报类似错误
- 模拟器启动命令:
"C:\Program Files\Azure Cosmos DB Emulator\Microsoft.Azure.Cosmos.Emulator.exe" /EnableMongoDbEndpoint - 管理面板可正常访问:
https://localhost:8081/_explorer/index.html - Studio 3T for MongoDB可成功连接到
localhost@localhost:10255
已尝试的配置与操作
- 按官方说明导出模拟器证书至项目根目录,通过以下代码获取证书路径:
const certFilePath = path.resolve(__dirname, '../', 'documentdbemulatorcert.cer'); - 两种连接方式均尝试:
- 方式1:使用管理面板复制的Mongo连接字符串
const connectOptions = { useNewUrlParser: true, useUnifiedTopology: true, ssl: true, sslValidate: true, sslCA: certFilePath, }; const client = new MongoClient(MONGODB_CONNECTION_STRING, connectOptions); - 方式2:使用Mongo URI、用户名和未编码密码(均来自管理面板)
const connectOptions = { auth: { username: MONGODB_AUTH_USERNAME, password: MONGODB_AUTH_PASSWORD_NOT_ENCODED, }, useNewUrlParser: true, useUnifiedTopology: true, ssl: true, sslValidate: true, sslCA: certFilePath, }; const client = new MongoClient(MONGODB_URI, connectOptions);
- 方式1:使用管理面板复制的Mongo连接字符串
- 通用连接代码:
try { await client.connect(); console.log('Connection to server successful'); } catch (error) { console.error('Connection to server failed:', error); } - 其他调试尝试:
- 移除
useNewUrlParser、useUnifiedTopology、ssl等所有配置参数,无效 - 设置
NODE_TLS_REJECT_UNAUTHORIZED=0运行应用,仅增加安全警告,错误依旧 - 使用Studio 3T的连接字符串,同样连接失败
- 移除
报错信息
MongoDB驱动报错
Connection to server failed: MongoServerSelectionError: connect ECONNREFUSED ::1:10255 at Timeout._onTimeout (...my-project-root...\node_modules\mongodb\lib\sdam\topology.js:292:38) at listOnTimeout (node:internal/timers:564:17) at process.processTimers (node:internal/timers:507:7) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:10255' => [ServerDescription] }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, setName: null, maxElectionId: null, maxSetVersion: null, commonWireVersion: 0, logicalSessionTimeoutMinutes: null }, code: undefined, [Symbol(errorLabels)]: Set(0) {} }
CosmosClient官方示例报错
Completed with error {"message":"request to https://localhost:8081/ failed, reason: connect ECONNREFUSED ::1:8081","type":"system","errno":"ECONNREFUSED","code":"ECONNREFUSED","headers":{"x-ms-throttle-retry-count":0,"x-ms-throttle-retry-wait-time-ms":0}}
环境信息
- Windows 11 x64
- Node.js 19.1.0
- mongodb驱动4.12.1
- Cosmos DB模拟器2.14.9.0
内容的提问来源于stack exchange,提问作者superjos
相关产品推荐
相关产品推荐

