javascript - ¿Node.js no puede crear Blobs?
Estoy trabajando con node.js y transmití mi audio a mi servidor node.js. Ahora noté durante el proceso de construcción del blob de audio:
var audioBlob = new Blob([dataview], { type: 'audio/wav' });
Que obtengo un ReferenceError en new Blob. Parece que Blob no es compatible. ¿Cómo puedo crear un blob que me gustaría guardar con el módulo fs de node.js?
Respuesta #1
Desde Node.js 18, Blob es accesible inmediatamente como una variable global:
new Blob([]);
//=> Blob {size: 0, type: ''}
De lo contrario, desde Node.js 16, se puede importar Blob:
import {Blob} from 'node:buffer';
new Blob([]);
//=> Blob {size: 0, type: ''}
De lo contrario, simplemente usa 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;
Respuesta #2
Nota: Esta respuesta solo se aplica si quieres seguir la respuesta de Richie Bendall.
Respuesta corta:
Evita importar Blob desde 'node:buffer'.
En su lugar, prefiere importarlo así (como se explica en la documentación de NodeJS. (ejemplo de implementación aquí)):
import { Blob } from 'buffer';
Respuesta larga:
La respuesta de Richie Bendall me ayudó mucho. Pero parece que importar Blob desde node:buffer rompe las pruebas unitarias de Jest, arrojando este error:
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)
En lugar de intentar simular la importación de node:buffer con algún código extraño o complicado, eché un vistazo a los ejemplos de la documentación de NodeJS. Así que demuestra que Blob se puede importar desde 'buffer'
import { Blob } from 'buffer';
// ...
// Only the import is changing, don't change your existing implementation
const blob = new Blob([buf], { type: 'application/pdf' });
¡Y todos los errores de Jest han desaparecido!
