import {Blob} from 'node:buffer';
new Blob([]);
//=> Blob {size: 0, type: ''}
否则,只需使用cross-blob:
import Blob from 'cross-blob';
new Blob([]);
//=> Blob {size: 0, type: ''}
// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob;
FAIL dist/tests/unit/users/getOneById.spec.js
● Test suite failed to run
ENOENT: no such file or directory, open 'node:buffer'
2 | import config from '../config/config';
3 | import { getFileExt, getFileName, removeFile } from './file';
> 4 | import { Blob } from 'node:buffer';
| ^
5 |
6 | class PdfHelpers {
7 |
at Runtime.readFile (node_modules/jest-runtime/build/index.js:2118:21)
at Object.<anonymous> (src/helpers/pdf.ts:4:1)
import { Blob } from 'buffer';
// ...
// Only the import is changing, don't change your existing implementation
const blob = new Blob([buf], { type: 'application/pdf' });
5条答案
按热度按时间ff29svar1#
这个问题的解决方案是创建一个函数,可以在数组缓冲区和节点缓冲区之间转换。:)
Convert a binary NodeJS Buffer to JavaScript ArrayBuffer
在最近的节点版本中,它只是:
0g0grzrc2#
由于Node.js 16,
Blob
可以导入:否则,只需使用
cross-blob
:ar7v8xwq3#
* 注意:这个答案只适用于你想遵循里奇·本德尔的答案的情况。
简短回答:
避免从
'node:buffer'
导入Blob
。相反,更喜欢像这样导入它(如NodeJS文档中所解释的那样。(这里是实现示例)):
详细答案:
Richie Bendall的回答帮了我很大的忙,但是从
node:buffer
导入Blob
似乎会破坏Jest单元测试,并抛出以下错误:我没有尝试用一些奇怪的代码来模拟
node:buffer
导入,而是查看了NodeJS文档示例,它演示了可以从'buffer'
导入Blob
所有的玩笑错误都消失了!
gcxthw6b4#
您可以尝试使用“流”节点API中的
Readable.from(value.buffer)
。它解决了我对FormData附加文件发送。
c2e8gylq5#
要考虑的另一个解决方案是使用Base64 String将数据从服务器传输到客户端。
我正在做一个Node.js项目,在这个项目中我接收到ArrayBuffer形式的音频数据,我想在浏览器中发送和播放这些数据。我的大部分困难来自于尝试将ArrayBuffer发送到客户端,或者尝试转换ArrayBuffer并发送一个Buffer。
对我来说最后一个简单的解决方案是
1.在服务器上将ArrayBuffer转换为Base64编码的字符串
1.将Base64字符串从服务器返回/发送到客户端
1.在客户端创建Audio元素/对象并播放声音
我使用base64-arraybuffer来执行ArrayBuffer〉Base64字符串转换(不过,不用包也可以很简单地完成)。
我使用here中的技巧在客户端创建音频元素。