使用request上传本地文件报错:Error: source.on is not a function
排查文件上传报错“Error: source.on is not a function”的思路
问题场景
我尝试使用以下代码将本地文件上传至指定URL,但持续抛出错误“Error: source.on is not a function”。推测该问题与fd.append的第二个参数有关,但尝试多种方案均未解决,恳请提供排查思路?
代码示例:
let file='screenshot.png' let url='...some url...' const fd = new FormData() fd.append('screenshotFile', fs.createReadStream(file), 'screenshot.png') try { request('POST', url, {form: fd}) } catch(e){ logger.log('ERROR',e) }
错误信息:
'ERROR': Error: source.on is not a function
排查思路
修正
request库的参数字段request库中,传递FormData对象需要使用formData字段而非form字段,form字段仅支持普通键值对表单。修改后的请求代码:request('POST', url, {formData: fd})验证可读流的有效性
确认fs.createReadStream(file)返回的是合法的可读流:const stream = fs.createReadStream(file); console.log(typeof stream.on); // 正常输出应为'function'若输出异常,检查:
- 文件路径是否正确(相对路径基于当前进程工作目录)
- 文件是否存在且拥有读取权限
确保Node.js环境使用正确的FormData实现
Node.js原生无FormData对象,需使用form-data包:- 安装依赖:
npm install form-data - 引入包:
const FormData = require('form-data');
误用浏览器内置FormData会导致流处理逻辑异常。
- 安装依赖:
检查流的生命周期状态
确保调用request时,可读流未被提前销毁或关闭,流的创建与请求调用需处于同一同步流程中,避免流被意外释放。
内容的提问来源于stack exchange,提问作者KillDash9
相关产品推荐
相关产品推荐

