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

使用MongoDB客户端字段级加密遇连接错误:ECONNREFUSED 127.0.0.1:27020

解决MongoDB客户端字段级加密的ECONNREFUSED 127.0.0.1:27020错误

错误原因

这个报错是因为MongoDB客户端字段级加密依赖的mongocryptd辅助进程未运行,或者驱动无法连接到该进程。mongocryptd默认监听27020端口,负责处理加密相关的逻辑运算。

解决方案

1. 确保mongocryptd进程正常运行

  • 先确认MongoDB安装目录下存在mongocryptd可执行文件(通常和mongod在同一目录)
  • 手动启动进程:
    mongocryptd --port 27020 --bind_ip 127.0.0.1
    
    启动后可保持终端窗口打开,或添加--fork参数让其后台运行(需提前配置日志文件路径)。

2. 修复代码中的关键问题

你的代码存在两处会引发异常的问题:

  • createDataKey的then回调未返回生成的dataKeyId,导致后续schemaMap中的keyId为undefined
  • 加密客户端配置未开启自动启动mongocryptd的选项,驱动无法自动拉起该进程

修正后的代码示例:

// 修正createDataKey的处理逻辑,确保获取到有效的dataKeyId
const dataKeyId = await clientEncryption.createDataKey("local");
console.log("Encryption key generated");

const schemaMap = {
  [`${dbName}.${collName}`]: {
    properties: {
      sensitiveField: {
        encrypt: {
          keyId: [dataKeyId],
          bsonType: "string",
          algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic",
        },
      },
    },
  },
};

const encryptedClient = new MongoClient(URL, {
  useUnifiedTopology: true,
  autoEncryption: {
    keyVaultNamespace,
    kmsProviders,
    schemaMap,
    // 添加extraOptions配置,让驱动自动启动mongocryptd
    extraOptions: {
      mongocryptdURI: "mongodb://127.0.0.1:27020",
      mongocryptdSpawnPath: "/path/to/your/mongocryptd", // 替换为实际路径,比如MongoDB安装目录下的mongocryptd
      mongocryptdSpawnArgs: [],
    },
  },
});

// 后续逻辑保持不变
try {
  await encryptedClient.connect();
  const db = encryptedClient.db(dbName);
  const collection = db.collection(collName);

  const doc = {
    medicalRecords: "my-sensitive-data",
    sensitiveField: "hsbdb-jd256b",
    bloodType: "O+",
    insurance: "hgvdw35w6-7643",
  };

  const result = await collection.insertOne(doc);
  if (result) console.log("data entered successfully");
} catch (error) {
  console.log("Error:", error);
}

3. 配置验证

  • 确认mongocryptdSpawnPath路径正确:Windows系统通常为C:\Program Files\MongoDB\Server\{版本号}\bin\mongocryptd.exe,Linux/macOS系统通常为/usr/local/bin/mongocryptd
  • 若已手动启动mongocryptd,可省略mongocryptdSpawnPath配置,驱动会直接连接到27020端口

内容的提问来源于stack exchange,提问作者Brijesh lakhani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:07:10