Búsqueda de sitios web

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!

Artículos relacionados