我尝试在Node.js中创建一个Blob
var b = new Blob(['hi', 'constructing', 'a', 'blob']);
ReferenceError: Blob is not defined
失败
然后我尝试使用blob
模块(这两行代码来自该模块的示例,请参阅https://www.npmjs.com/package/blob):
var Blob = require('blob');
var b = new Blob(['hi', 'constructing', 'a', 'blob']);
TypeError: Blob is not a constructor
失败
我该怎么做?
Node.js现在支持Blob
,自v15.7.0/v14.18以来是实验性的,自v18.0.0、v16.17.0以来是稳定的。这是将web API引入Node.js的持续努力的一部分,这样代码就可以在web和Node.js平台上重用。
这个答案的其余部分仍然适用于blob
包和您将要使用它的目的:
Node.js不过去不具有Blob
,它使用Buffer
(不与ArrayBuffer
混淆(和类型化数组。
您尝试使用的blob
npm
模块不用于Node.js,而是用于浏览器,以消除在不同浏览器中创建Blob
的历史差异。根据其描述:
一个跨浏览器
Blob
,在适当的时候回落到BlobBuilder
。如果两者都不可用,则导出undefined
。
(我的重点(
令人困惑的是,在过去几年里,以浏览器为目标的软件包(成群结队(出现在npm
上。一段时间以来,使用require
的模块一直是Webpack、Rollup等捆绑器的一个功能,因此人们开始将npm
用于浏览器的通用模块,就像将其用于Node.js的通用模块一样。事实上,有些模块是为在这两种环境中都能工作而编写的。(但blob
似乎不是其中之一。(
在评论中,您说过要从Node.js进程上传一个文件。您不需要Blob
,在Node.js
中执行此操作的方式与在浏览器中执行的方式不同。因此,您可能想研究如何从Node.js上传文件,而不必担心Blob
s。不过,这将是一个不同的问题。(一个可以在这里回答,如果你愿意使用Express,也可以在这里。(