Создание и сохранение Blob в Node.js: обход ReferenceError
Быстрый ответ
Для работы с бинарными данными в Node.js используйте класс Buffer
:
// Создаём Buffer с текстом "Привет, Buffer!"
const buffer = Buffer.from('Привет, Buffer!', 'utf-8');
Если вам необходим объект Blob
, можно воспользоваться библиотекой buffer
:
const { Blob } = require('buffer');
// Готово! Теперь у вас есть Blob!
const blob = new Blob([buffer], { type: 'application/octet-stream' });
Buffer
захватил мир Node.js, так что использование полифила Blob
помогает улучшить совместимость кода, предназначенного для браузеров.
Эмуляция Blob в Node.js до версии 16
В версии Node.js 16 появилась встроенная поддержка Blob
, что стало отличной новостью. Однако для более ранних версий Node.js можно использовать такие пакеты, как cross-blob
:
const Blob = require('cross-blob');
const blob = new Blob(['Используем Blob в Node.js и это удивительно!'], { type: 'text/plain' });
Благодаря cross-blob
, создание Blob
теперь столь же просто, как в браузере.
Работа с бинарными данными при помощи Buffer и fs
Buffer
— это универсальный инструмент для работы с бинарными данными в Node.js. Когда дело доходит до файлов или потоковых данных, например, аудио в формате WAV, Buffer
в сочетании с модулем fs
показывает отличные результаты:
const fs = require('fs');
const buffer = Buffer.from(audioData);
fs.writeFile('audio.wav', buffer, (err) => {
if (err) throw err;
console.log('Аудио данные успешно записаны. Можно наслаждаться музыкой!');
});
Этот подход прост в реализации и эффективен.
Использование Blob при модульном тестировании
Во время модульного тестирования с помощью Jest, возможно потребуется работа с Blob
. На этот случай есть такое решение:
const { Blob } = require('buffer');
test('Проверка создания Blob', () => {
const testData = 'Привет, Blob!';
const blob = new Blob([testData], { type: 'text/plain' });
// Можно продолжать тестирование.
});
Визуализация
Попытка использовать Blob в Node.js чем-то напоминает попытку наполнить ведро дымом. Это просто не то. Здесь требуется другой подход. Давайте посмотрим на разницу между созданием Blob в Node.js и браузере:
Среда Node.js | Попытка создания Blob | Приемлемо?
------------------------|-----------------------------|-------------
JavaScript (Backend) | new Blob(...) | 📦❌
Node.js
: "Так, попробуем создать Blob!"
const blob = new Blob(['text'], {type: 'text/plain'}); // 🚫 Ошибка!
Реальность: "Blob здесь не работает!"
В Node.js: 🚫☁️
В браузере: ✅☁️
Мы быстро осознаём, что в Node.js
Blob
по умолчанию не поддерживается. Здесь испольузется Buffer
.
Правильный инструмент в Node.js: Buffer
====================================
const buffer = Buffer.from('text', 'utf-8'); // ✅ Buffer – наш выбор!
Обмен данными между Node.js и браузером
Если вы разрабатываете код для Node.js и браузера одновременно, вам не удастся игнорировать Blob
. Здесь на помощь придут полифиллы:
// Встречайте полифилл, который делает Blob совместимым с Node.js.
globalThis.Blob = require('cross-blob');
Таким образом, мы можем говорить о Blob
в контексте как Node.js, так и браузера. И всегда выбирайте соответствующий MIME-тип при создании Blob
:
const blob = new Blob(['Привет, Blob!'], { type: 'application/json' });
Полезные материалы
- Blob – Веб API | MDN — Подробное объяснение работы с объектом Blob в контексте веб-разработки.
- Buffer | Документация Node.js — Руководство по использованию Buffer в Node.js для работы с бинарными данными.
- Файловая система | Документация Node.js — Руководство по использованию модуля файловой системы Node.js для работы с файлами и Blob.
- blob – npm — NPM-пакет, обеспечивающий работу с Blob в серверном JavaScript.
- blob-polyfill – npm — Полифилл, обеспечивающий поддержку Blob в Node.js.
- fetch-blob – npm — Пакет для использования Blob вместе с функцией
fetch
в Node.js, обеспечивающий совместимость с современными веб-API. - Понимание потоков в Node.js – NodeSource — Статья о потоках в Node.js, актуальная при работе с Blob и бинарными данными.