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

Node.js Express+TypeScript中Blob/File的text()方法报错:text is not a function

问题描述

使用TypeScript开发Node.js Express后端时,遇到Blob/File接口的text()方法无法识别的问题:

  • 前端以File类型发送生成的PDF到后端
  • VSCode智能提示能识别Blob接口的text()方法,但调用时报错:${variableName}.text is not a function
  • 已尝试操作:
    • 升级TypeScript到v3.9.5
    • 设置工作区TypeScript版本
    • 确认传入数据类型
    • 重启Docker容器
  • 附TypeScript v3.9.5的lib.dom.d.ts中Blob接口定义:
interface Blob {
    readonly size: number;
    readonly type: string;
    arrayBuffer(): Promise<ArrayBuffer>;
    slice(start?: number, end?: number, contentType?: string): Blob;
    stream(): ReadableStream;
    text(): Promise<string>;
}
解决方案

1. 检查Node.js版本兼容性

Node.js从v15.7.0开始实验性支持Blob的text()方法,v16.0.0才稳定支持。如果你的Node.js版本低于这个范围,即使TypeScript类型定义存在,运行时也会找不到该方法。

  • 执行node -v查看当前版本,若版本过低,升级到v16+ LTS版本。

2. 确认后端接收的实际数据类型

Express后端接收前端上传的File时,不会直接得到浏览器环境的Blob/File对象,通常是通过multer等中间件处理后的Buffer或流对象,或是req.body中的二进制数据。TypeScript的类型提示可能因你给变量标注了Blob类型,但实际运行时是Node.js的Buffer或其他类型,导致无text()方法。

  • 若用multer接收文件,上传内容存在req.file.buffer(Buffer类型),可直接用buffer.toString('utf8')替代text()方法;若为原始二进制流,先转换为Buffer再处理。

3. 补充Blob polyfill(针对低版本Node.js)

如果无法升级Node.js,可引入blob-polyfill补充支持:

  • 安装依赖:npm install blob-polyfill
  • 在项目入口文件添加:import 'blob-polyfill';
  • 确保tsconfig.json的compilerOptions.lib中包含"dom"库,保证类型定义生效。

4. 修正TypeScript类型标注

确保变量类型与运行时实际值一致:

  • 若实际接收的是Buffer,不要标注为Blob,直接用Buffer类型,通过buffer.toString()处理内容;
  • 若需要转为Blob(高版本Node.js支持),可手动转换:
const blob = new Blob([req.file.buffer], { type: req.file.mimetype });
const textContent = await blob.text();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:01:00