UnhandledPromiseRejectionWarning: Error: EISDIR: illegal operation on a directory, read при записи *.xlsx файла

const Excel = require('exceljs');
const fs = require('fs');

function checkFileAvailability(str) {
    if (fs.existsSync(str)) {
        return str;
    } else {
        return './images/no_image.jpg'
    }
}


exports.createXLSXFiles = async function createXLSXFiles(map, data) {
    let props = [
        {header: 'Изображение', key: 'img', width: 100},
        {header: 'Полное название', key: 'title', width: 30},
        {header: 'Род. каталог', key: 'parent', width: 30},
        {header: 'Артикул товара', key: 'vendorCode', width: 15},
        {header: 'Цена', key: 'cost', width: 15},
        {header: 'Код производителя', key: 'manufacturerCode', width: 20},
        {header: 'Полное описание', key: 'description', width: 300}
    ]
    for (let catalog of map.keys()) {
        const workbook = new Excel.Workbook();
        let arrayOfSheets = map.get(catalog);

        if (!arrayOfSheets.length) {
            let worksheet = workbook.addWorksheet(transformString(catalog), {
                properties: {
                    defaultRowHeight: 500,
                }
            })
            worksheet.columns = props;
            worksheet.getRow(1).height = 15;
            const productsForSheet = data.filter(val => val.parent === catalog)
            for (let i = 0; i < productsForSheet.length; i++) {
                let path = checkFileAvailability(`./images/${productsForSheet[i].imgSrc.split('/').pop()}`);
                let imageToPaste = workbook.addImage({
                    filename: path,
                    extension: "jpeg"
                });
                worksheet.addImage(imageToPaste, {
                    tl: {col: 0, row: 1.1 + i},
                    ext: {width: 500, height: 500},
                    editAs: 'undefined'
                });
                worksheet.addRow(productsForSheet[i]);
            }

        } else {
            arrayOfSheets.forEach(el => {
                let worksheet = workbook.addWorksheet(transformString(el), {
                    properties: {
                        defaultRowHeight: 500,
                    }
                })
                worksheet.columns = props;
                worksheet.getRow(1).height = 15;

                const productsForSheet = data.filter(val => val.parent === el)
                for (let i = 0; i < productsForSheet.length; i++) {
                    const path = checkFileAvailability(`./images/${productsForSheet[i].imgSrc.split('/').pop()}`);
                    let imageToPaste = workbook.addImage({
                        filename: path,
                        extension: "jpeg"
                    });
                    worksheet.addImage(imageToPaste, {
                        tl: {col: 0, row: 1.1 + i},
                        ext: {width: 500, height: 500},
                        editAs: 'undefined'
                    });
                    worksheet.addRow(productsForSheet[i]);
                }
            })
        }
        try {
            await workbook
                .xlsx
                .writeFile(`./${catalog}.xlsx`)
                .then(() => console.log('Saved'))
                .catch(err => console.log(err))
        } catch (e) {
            console.log(`Ошибка в каталоге ${catalog}`, e);
        }

    }
}

function transformString(str) {
    if (str.length > 31) {
        return str.split(' ').map(el => el.substring(0, 3) + '. ')
            .join('');
    } else {
        return str;
    }
}
Имеется код, который должен производить сохранение *.xlsx файла. Данные по названию файла, названию листов в книге беру из Map, ключом которой является строка (она задает название файлу), а значением должен быть массив строк(каждый элемент массива строк должен задавать название листа в файле). По итогу получаю ошибку EISDIR: illegal operation on a directory read. Прошу прощения за плохой код. Пишу как умею, на данный момент. Однако понять не могу, какая причина может вызвать эту ошибку по которой нода пытается произвести операции с директории характерные файлу? Если есть идеи, какие изменения можно внести в код, чтобы понять причину возникновения ошибки - буду рад их прочитать. Для пояснения ясности - могу предоставить необходимые исходные данные


Ответы (1 шт):

Автор решения: Павел Петров

Как посоветовал Aziz Umarov, после добавления логов - проблема была на стороне приходящих данных, которые из-за моей безответственности, никак не обрабатывались. Добавил проверок в нужных местах на корректность адреса хранения файла.

→ Ссылка