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

使用NodeJS读取Azure Blob Storage的CSV文件时setHeader未定义报错如何解决

报错原因与解决方案

错误根因

你手动执行chkFile();时未传入HTTP响应对象res,导致getBlobDataToStreamm方法接收的res参数为undefined,调用res.setHeader时触发类型错误。

解决方案

根据你的使用场景选择对应处理方式即可:

场景1:代码作为HTTP接口使用(供前端/客户端调用下载)

这种情况不需要手动调用chkFile(),只要把这个函数挂载到你的服务路由上即可,以Express框架为例:

// 示例Express路由配置
const express = require('express');
const app = express();
// 挂载接口,访问该地址时Express会自动传入req、res对象
app.get('/download-csv', chkFile);
// 启动服务
app.listen(3000, () => console.log('服务启动在3000端口'));

完成配置后访问http://localhost:3000/download-csv就能正常触发下载,不会报错。

场景2:本地直接运行处理CSV(不需要走HTTP响应)

这种情况不需要用到res对象,修改getBlobDataToStreamm逻辑,直接将blob流写入本地文件即可:

// 修改后的blobstorage方法
const getBlobDataToLocal = async function(req){
  try{
    const fs = require('fs');
    const { storageName, blobFileName, downloadFileName } = req;
    const writeStream = fs.createWriteStream(downloadFileName);
    return new Promise((resolve, reject) => {
      blobService.getBlobToStream(storageName, blobFileName, writeStream, function(error, result, response) {
        if(error){
          console.log('下载出错',error);
          reject(error);
        }else{
          console.log('下载完成',result);
          resolve(downloadFileName);
        }
      })
    })
  }catch(err){ 
    console.log("捕获错误",err);
    throw err;
  }
}

// 调用方式
var chkFile = async function () { 
  let reqq = {
    storageName:"consent",
    blobFileName: "filename",
    downloadFileName:"filenamee"
  }    
  let localFilePath = await blob.getBlobDataToLocal(reqq)
  // 接下来就可以读取本地的CSV文件转JSON处理了
  console.log('本地文件路径', localFilePath)
}
chkFile();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:57:02