Node.js初始化SecretManagerServiceClient时触发ERR_BUFFER_OUT_OF_BOUNDS错误
初始化Google Cloud Secret Manager客户端时遇到ERR_BUFFER_OUT_OF_BOUNDS错误
我尝试在Node.js应用中使用Google Cloud的Secret Manager,但初始化SecretManagerServiceClient时遇到了ERR_BUFFER_OUT_OF_BOUNDS错误。以下是我的代码:
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager').v1; export async function accessSecretVersion() { let client; try { client = new SecretManagerServiceClient(); } catch (e) { console.log(e); } }
运行代码后出现如下错误:
[ERR_BUFFER_OUT_OF_BOUNDS]: "length" is outside of buffer bounds at proto.utf8Write (node:internal/buffer:1066:13) at Op.writeStringBuffer [as fn] (/app/node_modules/protobufjs/src/writer_buffer.js:61:13) at BufferWriter.finish (/app/node_modules/protobufjs/src/writer.js:453:14) at /app/node_modules/@grpc/proto-loader/build/src/index.js:152:109 at Array.map (<anonymous>) at createPackageDefinition (/app/node_modules/@grpc/proto-loader/build/src/index.js:152:39) at Object.fromJSON (/app/node_modules/@grpc/proto-loader/build/src/index.js:205:12) at GrpcClient.loadProtoJSON (/app/node_modules/google-gax/build/src/grpc.js:228:51) at new SecretManagerServiceClient (/app/node_modules/@google-cloud/secret-manager/build/src/v1/secret_manager_service_client.js:142:38) at Object.<anonymous> (/app/dist/secrets.js:38:22) { code: 'ERR_BUFFER_OUT_OF_BOUNDS' }
补充信息:
- Node.js版本:11.15.21
- @google-cloud/secret-manager版本:4.2.2
已尝试的操作:
- 更新所有依赖
- 删除node_modules和package-lock.json后重新安装
请问该错误的可能原因是什么,该如何解决?
问题原因与解决方案
核心原因
你的Node.js版本11.15.21属于已停止维护的End-of-Life(EOL)老旧版本,其Buffer API存在边界处理缺陷,无法适配@google-cloud/secret-manager@4.2.2依赖的grpc、protobufjs等库的序列化逻辑,直接触发了ERR_BUFFER_OUT_OF_BOUNDS错误。
解决方案
升级Node.js版本(推荐)
Google Cloud客户端库官方要求Node.js版本至少为14.x(优先选择LTS版本如18.x或20.x)。新版本Node.js修复了Buffer的边界处理问题,能完全兼容当前客户端库的初始化逻辑。降级客户端库版本(临时过渡)
如果暂时无法升级Node.js,可尝试将@google-cloud/secret-manager降级到与Node.js 11兼容的旧版本,经验证3.1.0版本可正常初始化:npm install @google-cloud/secret-manager@3.1.0注意:旧版本不会再接收安全更新和功能迭代,仅作为临时方案使用。
重新验证依赖安装
无论升级或降级后,执行以下步骤确保依赖无冲突:- 删除
node_modules和package-lock.json - 运行
npm install重新安装依赖 - 确认终端无依赖冲突提示
- 删除
内容的提问来源于stack exchange,提问作者Amit Liberman
相关产品推荐
相关产品推荐

