【问题标题】:TypeError, text is not a function when attempting to use text() from either Blob or FileTypeError,当尝试使用 Blob 或 File 中的 text() 时,文本不是函数
【发布时间】:2022-12-11 18:53:27
【问题描述】:

我试图弄清楚为什么我使用 TypeScript 的 node.js express 后端无法识别 typescript lib.dom.d.ts 文件中定义的函数。有问题的接口/类型是文件/Blob,一个文件扩展了一个 Blob,我试图访问的函数是 Blob 接口中的 text(),在下面从打字稿 v3.9.5 的 lib.dom.d.ts 文件中执行

interface Blob {
    readonly size: number;
    readonly type: string;
    arrayBuffer(): Promise<ArrayBuffer>;
    slice(start?: number, end?: number, contentType?: string): Blob;
    stream(): ReadableStream;
    text(): Promise<string>;
}

我从前端的 div 生成 PDF,然后将 pdf 作为文件类型发送到后端。

在 VSCode 中,我可以将我的文件转换为文件或 Blob,以便从 Blob 界面查看上面列出的所有只读和函数的 IntelliSense 自动完成选项。

尽管如此,只要我尝试使用 .text() 函数,我的 API 就会失败,并指出 ${variableName}.text 不是函数。

我已尝试将我的 TypeScript 更新为 v3.9.5 question 并将我的 TypeScript 版本设置为我的工作区版本。

在尝试使用 text() 函数之前,我已经通过 console.logging 变量确认传入数据作为文件类型传入。我还尝试使用 IntelliSense 将变量转换为文件和 Blob 以完成调用。

我试图擦除运行我的 nodeJS express 后端的 docker 容器。

【问题讨论】:

  • 错误是否发生在运行时?
  • @Konrad 是的,没有启动错误;尝试使用 text() 时只是出错
  • 这意味着它与打字稿无关。您的变量不是 blob,因此没有 text 方法

标签: node.js typescript express docker-compose


【解决方案1】:

感谢 Konrad,我通过输出 ${variable} instanceof File/Blob 确定问题是 NodeJS 没有 Blob 或文件类型,并且每种类型都给我一个 File/Blob is not defined 错误。 看起来 VSCode/Typescript 错误地暗示它们确实存在。

这是我想出的解决方案

function filePathToBase64(file: string): string {
  let bitmap: Buffer = fs.readFileSync(file);
  return buffer.from(bitmap).toString('base64');
}

我使用 NodeJS 的 fs 并读取传入的 FormData 的文件路径,就像 /tmp/${random generated path}

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 2018-01-10
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多