使用@azure/storage-blob调用listContainers时遇AZURE_TRACING_DISABLED未定义错误
解决@azure/storage-blob调用listContainers时的"AZURE_TRACING_DISABLED"未定义错误
问题重现
使用@azure/storage-blob库,通过BlobServiceClient调用listContainers()获取容器列表时,触发错误:
cannot read properties of undefined (reading 'AZURE_TRACING_DISABLED')
初始化连接字符串代码:
const connectionString = `BlobEndpoint=${environment.SAS_URL};SharedAccessSignature=${environment.SAS}` this.blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);
调用容器列表代码:
async listCointainer(){ let containers = [] let iter = this.blobServiceClient.listContainers() let containerItems = await iter.next() while(!containerItems.done){ containers.push(containerItems.value.name) containerItems = await iter.next() } console.log(containers); }
原因及修复方案
1. 依赖包版本不兼容或缺失
AZURE_TRACING_DISABLED是Azure SDK内部追踪模块的配置项,错误通常源于@azure/storage-blob依赖的@azure/core-tracing包未正确安装或版本不匹配。
修复步骤:
- 卸载并重装指定稳定版本的@azure/storage-blob:
npm uninstall @azure/storage-blob npm install @azure/storage-blob@12.17.0 - 若package.json中无
@azure/core-tracing依赖,手动安装:npm install @azure/core-tracing
2. 连接字符串格式错误
使用SAS构建连接字符串时,需严格遵循格式要求:BlobEndpoint=https://<account-name>.blob.core.windows.net/;SharedAccessSignature=<sas-token>
检查点:
- 确认
environment.SAS_URL是完整的Blob服务端点(如https://xxx.blob.core.windows.net) - 确认
environment.SAS是不带?前缀的完整SAS令牌
3. 异步迭代器写法优化
虽然原有逻辑可行,但改用for await...of语法可简化代码并避免潜在异步问题:
async listCointainer(){ let containers = [] for await (const container of this.blobServiceClient.listContainers()) { containers.push(container.name); } console.log(containers); }
4. 确保BlobServiceClient已完成初始化
检查调用listContainers()的时机,确保this.blobServiceClient已完成初始化。例如在Angular中,应在ngOnInit钩子中完成初始化:
ngOnInit(): void { const connectionString = `BlobEndpoint=${environment.SAS_URL};SharedAccessSignature=${environment.SAS}`; this.blobServiceClient = BlobServiceClient.fromConnectionString(connectionString); }
内容的提问来源于stack exchange,提问作者Karan Kapadni
相关产品推荐
相关产品推荐

