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) Сервер выполняет процесс дважды, хотя я нажал кнопку только один раз. Вот процесс, происходящий дважды на сервере