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

Node.js调用Firestore获取文档时出现RangeError [ERR_BUFFER_OUT_OF_BOUNDS]错误

Node.js 调用Firestore.get()时触发RangeError[ERR_BUFFER_OUT_OF_BOUNDS]错误

问题场景

使用Node.js从Firestore获取用户配置文档时,调用profileRef.get()触发RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: "length" is outside of buffer bounds错误。

代码片段

const profileRef = db.collection("profiles").doc(uid);
const profileSnapshot = await profileRef.get();

if (!profileSnapshot.exists) {
  return res.status(404).send({ message: "Profile not found" });
}

const profileInfo = profileSnapshot.data();

错误栈

Error stack: RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: "length" is outside of buffer bounds
    at proto.utf8Write (node:internal/buffer:1066:13)
    at Op.writeStringBuffer [as fn] (/Users/fao/Documents/spotters-api/node_modules/protobufjs/src/writer_buffer.js:61:13)
    at BufferWriter.finish (/Users/fao/Documents/spotters-api/node_modules/protobufjs/src/writer.js:453:14)
    at /Users/fao/Documents/spotters-api/node_modules/@grpc/proto-loader/build/src/index.js:177:109
    at Array.map (<anonymous>)
    at createPackageDefinition (/Users/fao/Documents/spotters-api/node_modules/@grpc/proto-loader/build/src/index.js:177:39)
    at Object.fromJSON (/Users/fao/Documents/spotters-api/node_modules/@grpc/proto-loader/build/src/index.js:230:12)
    at GrpcClient.loadProtoJSON (/Users/fao/Documents/spotters-api/node_modules/google-gax/build/src/grpc.js:228:51)
    at new LocationsClient (/Users/fao/Documents/spotters-api/node_modules/google-gax/build/src/locationService.js:118:32)
    at new FirestoreClient (/Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/v1/firestore_client.js:136:32)
Caused by: Error
    at /Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/index.js:1042:27
    at DisabledTraceUtil.startActiveSpan (/Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/telemetry/disabled-trace-util.js:16:16)
    at Firestore.getAll (/Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/index.js:1033:32)
    at /Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/reference/document-reference.js:182:36
    at DisabledTraceUtil.startActiveSpan (/Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/telemetry/disabled-trace-util.js:16:16)
    at DocumentReference.get (/Users/fao/Documents/spotters-api/node_modules/@google-cloud/firestore/build/src/reference/document-reference.js:181:43)
    at getProfilePageModel (/Users/fao/Documents/spotters-api/src/controllers/dataBaseController.js:38:48)
    at Layer.handle [as handle_request] (/Users/fao/Documents/spotters-api/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/fao/Documents/spotters-api/node_modules/express/lib/router/route.js:149:13)
    at Route.dispatch (/Users/fao/Documents/spotters-api/node_modules/express/lib/router/route.js:119:3)
(node:54380) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)

环境信息

  • Node.js版本:v22.7.0
  • package.json依赖:
{
  "name": "spotters-api",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "@google-cloud/firestore": "^7.10.0",
    "dotenv": "^16.4.5",
    "express": "^4.21.0",
    "firebase-admin": "^12.5.0"
  }
}

已尝试的排查步骤

  • 验证目标UID对应的Firestore文档确实存在
  • 确认Firestore安全规则允许读取profiles集合
  • 将所有依赖包更新至最新版本

可能的解决方案

  • 降级Node.js版本:Node.js v22属于较新版本,可能与@google-cloud/firestore或其依赖的grpc、protobufjs库存在兼容性问题,建议降级到LTS版本(如v20.x)测试。
  • 清理依赖冲突:同时安装@google-cloud/firestore和firebase-admin可能导致依赖冲突,因为firebase-admin已内置Firestore客户端,可尝试移除@google-cloud/firestore,仅使用firebase-admin提供的Firestore实例。
  • 重新安装依赖:删除依赖缓存后重新安装,执行以下命令:
    rm -rf node_modules package-lock.json
    npm install
    
  • 锁定protobufjs版本:错误栈指向protobufjs的buffer写入问题,可在package.json中添加兼容版本的锁定:
    "resolutions": {
      "protobufjs": "~7.2.6"
    }
    
    之后重新安装依赖(npm需配合npm-force-resolutions工具,或直接使用yarn)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:27:32