Работа с файлами
Nodul поддерживает два способа работы с файлами в сценариях:
- No-code узлы: вы передаёте ссылку на файл из одного узла в другой.
- Узел JavaScript: вы читаете/изменяете/создаёте файл в коде и возвращаете его обратно как файловый вывод.
Передача файлов между no-code узлами
Когда узел выводит файл, он обычно содержит объект file с полями типа content (внутренний путь/ссылка), filename, extension и другими.

Типичное сопоставление в принимающих узлах
Большинство узлов принимают либо весь объект файла, либо запрашивают конкретные поля (например, File Path и Name). Используйте виджет-помощник для вставки значений из предыдущих узлов.
| Поле принимающего узла | Что сопоставлять | Пример |
|---|---|---|
| File Path / File Content | Ссылка/путь к файлу | {{$2.result.file.content}} |
| Name | Имя файла | {{$2.result.file.filename}} |
| Extension (опционально) | Расширение файла | {{$2.result.file.extension}} |

Работа с файлами в узле JavaScript
Если вам нужно прочитать, преобразовать или сгенерировать файл в коде, вы должны работать с путём к файлу и Node.js fs.
Шаг 1: Получение временного пути к файлу
Используйте шаблонный доступ к данным для получения пути к файлу из предыдущего узла (пример: Узел 2).
const contentFilePath = data["{{2.result.file.content}}"];
Шаг 2: Чтение/изменение файла (Buffer)
Прочитайте файл по пути, выполните преобразование и создайте новый Buffer (или запишите байты напрямую).
Шаг 3: Запись и возврат файла
Запишите выходной файл во временную файловую систему и верните его с помощью хелпера file(), чтобы другие узлы могли его использовать.
Важно
Не возвращайте сырой путь из data[...] как финальный вывод. Всегда следуйте схеме: получить путь → прочитать → изменить → записать → вернуть file(...).

Совет: Попросите ИИ-агента вернуть бинарный файл
ИИ-агент внутри узла JavaScript может генерировать код, возвращающий бинарные файлы (изображения, PDF, CSV, видео и т.д.) из коробки. Вы можете явно попросить его:
- Прочитать файл из вывода конкретного узла (например, «Узел 2»).
- Обработать его (конвертировать, изменить размер, сжать, распарсить и т.д.).
- Вернуть результат как файловый вывод с использованием
file()и правильногоfileType.
Пример промпта, который можно вставить в ИИ-чат в узле JavaScript:
Прочитай файл из вывода Узла 2 (
result.file.content), конвертируй его в PDF и верни как бинарный файловый вывод с правильным MIME-типом.
Полный пример: Чтение → Изменение → Запись → Возврат (CSV)
import fs from 'fs';
export default async function run({ data }) {
// 1) Получаем временный путь к файлу из вывода Узла 2
const contentFilePath = data["{{2.result.file.content}}"];
if (!contentFilePath) {
throw new Error(
'Путь к файлу не найден. Проверьте, что Узел 2 выводит result.file.content и вставьте его через виджет-помощник.'
);
}
// 2) Читаем файл как Buffer
const contentFileBuffer = fs.readFileSync(contentFilePath);
// 3) Изменяем (пример: добавляем столбец ',"Processed"' к каждой строке CSV)
const csvContent = contentFileBuffer.toString('utf8');
const rows = csvContent.split('\n');
const header = rows[0] ?? '';
const processedRows = [header];
for (let i = 1; i < rows.length; i++) {
const row = rows[i];
if (!row || row.trim() === '') continue;
processedRows.push(`${row.trim()},"Processed"`);
}
const processedCsvString = processedRows.join('\n');
const processedFileBuffer = Buffer.from(processedCsvString, 'utf8');
// 4) Записываем и возвращаем как файловый вывод
const newFileName = 'processed_data.csv';
fs.writeFileSync(newFileName, processedFileBuffer);
return {
file: file(newFileName),
fileType: 'text/csv',
};
}