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中添加兼容版本的锁定:
之后重新安装依赖(npm需配合"resolutions": { "protobufjs": "~7.2.6" }npm-force-resolutions工具,或直接使用yarn)。
内容的提问来源于stack exchange,提问作者Sarthak
相关产品推荐
相关产品推荐

