使用Google Storage Write API向BigQuery插入行时遭遇元数据获取错误(Headers is not defined)
Google Storage Write API向BigQuery插入行时遭遇元数据获取错误(Headers is not defined)
嘿,这个Headers is not defined的错误我之前帮朋友排查过类似的,大概率是因为Storage Write API和你之前用的老流式API在请求配置、依赖环境上的差异导致的,我给你梳理几个排查方向:
先把你遇到的错误再明确下:
Error: 2 UNKNOWN: Getting metadata from plugin failed with error: Headers is not defined metadata: Metadata { internalRepr: Map(0) {}, options: {} }, note: 'Exception occurred in retry method that was not classified as transient'
接下来你可以按这几步来排查:
- 先检查你的Google Cloud客户端库版本,比如
@google-cloud/bigquery或者相关的Storage Write API依赖包,有些旧版本的库在处理新API的请求元数据时,没有正确初始化HTTP Headers对象,直接升级到最新稳定版往往能解决这类兼容性问题 - 看看你的代码运行环境,比如如果是Node.js环境,低于18版本的Node是没有内置Fetch API的
Headers对象的,要是你用的客户端库依赖这个全局对象,就会报未定义的错误。这种情况要么升级Node到18+,要么手动引入node-fetch这类polyfill包,并且在代码里显式导入Headers - 对比你之前老流式API的代码,有没有把旧的元数据配置直接复用在新API里?Storage Write API对请求元数据的要求更严格,不能传空的元数据对象,得确保在创建写入流或者发送请求时,正确设置了必要的请求头(比如授权头、Content-Type),而且要使用标准的
Headers实例,不是随便一个空对象 - 如果你是自己封装的HTTP请求调用API,那一定要确认你手动实例化了
Headers对象,比如写new Headers()来承载元数据,而不是直接用{}代替,不然库在解析元数据的时候就会找不到Headers类型的对象而报错
你可以先从升级客户端库开始试,这个是最常见的解决办法,要是还不行再检查环境和代码里的请求头配置~
内容来源于stack exchange
相关产品推荐
相关产品推荐

