Ext.Ajax.request возвращает ошибку до того, как сервер ответит на запрос

У меня есть проблема, которую я пытался решить какое-то время, но безрезультатно, не могу найти решение.

Снимок экрана интерфейса пользователя с параметром поиска

Когда я нажимаю кнопку "Экспортировать Excel" один раз, он использует запрос AJAX для получения файла Excel.

Я использую exceljs из npm для чтения и записи файла Excel

и mssql из npm для потоковой передачи данных из запроса (я использую это, потому что создатель рекомендовал его для очень больших строк данных. Я получил около 36 тысяч строк результата с 20 столбцами в каждой строке).

Вот код

sql.connect(settings.dbConfig10, err => {
            // ... error checks
            console.log('sqlquery', sqlquery);
            const request = new sql.Request()
            request.stream = true // You can set streaming differently for each request

            request.query(sqlquery) // or request.execute(procedure)
            var rowData = [];
            var result2 = {
                success: true
            };

            request.on('recordset', columns => {
                // Emitted once for each recordset in a query

            })

            request.on('row', row => {
                // Emitted for each row in a recordset'
                // console.log('row', row);
                // rowData.push(row);
                sheet.addRow({
                    Tanggal_cms: row.Tanggal_cms,
                    KodeBatch_cms: row.KodeBatch_cms,
                    kredit_giro_premi_cms: row.kredit_giro_premi_cms,
                    debit_giro_fee_cms: row.debit_giro_fee_cms,
                    WILAYAH: row.WILAYAH,
                    branch_name: row.branch_code + ' - ' + row.branch_name,
                    unit_name: row.unit_code + ' - ' + row.unit_name,
                    Tanggal: row.Tanggal,
                    KODE_BATCH: row.KODE_BATCH,
                    NAMA_PESERTA: row.NAMA_PESERTA,
                    NO_KEPESERTAAN: row.NO_KEPESERTAAN,
                    PREMI_DIBAYARKAN: row.PREMI_DIBAYARKAN,
                    fee: row.fee,
                    NAMA_UKER_CABANG: row.KODE_UKER_CABANG + ' - ' + row.NAMA_UKER_CABANG,
                    NAMA_UKER_UNIT: row.KODE_UKER_UNIT + ' - ' + row.NAMA_UKER_UNIT
                })
            })

            request.on('error', err => {
                // May be emitted multiple times
                console.log('error', err);
            })

            request.on('done', result => {

workbook.xlsx.writeFile("ReportRekonGiroPremi.xlsx").then(function() {
                    console.log("ReportRekonGiroPremi.xlsx file is written.");
                    fs.readFile("ReportRekonGiroPremi.xlsx", function(err, buff) {
                        fs.unlink("ReportRekonGiroPremi.xlsx", function(err) {});
                        res.setHeader('Content-disposition', 'attachment; filename=ReportRekonGiroPremi.xlsx');
                        console.log('test');
                        res.end(buff, 'binary');
                    });
                })
            })

Проблема в том, что я не понимаю, почему, но журнал IISNode/daemon покажет, что после однократного нажатия кнопки процесс происходит дважды или более. Пользовательский интерфейс будет ловить ответ о сбое, в то время как на самом деле сервер все еще будет передавать данные из базы данных, и когда это будет сделано, будет создан файл Excel.

Вот скриншоты (скриншот, который я показываю здесь, взят из пользовательского интерфейса и логов демона с сервера после использования окон узла из npm.

1) Пользовательский интерфейс получил ответ об ошибке (я не уверен, откуда он пришел, потому что, как я уже сказал, сервер все еще выполнял процесс) Вот пользовательский интерфейс, который перехватывает ответ об ошибке

2) Сервер выполняет процесс дважды, хотя я нажал кнопку только один раз. Вот процесс, происходящий дважды на сервере

0 ответов

Другие вопросы по тегам