Я использую responseJs и Node для серверной части.Мне нужно разрешить пользователям нажимать кнопку «Загрузить данные», которая вызовет Node API.Node api запрашивает базу данных mySQL для конкретной таблицы и передает ответ пользователю с помощью fast-csv .На стороне клиента я собираю поток ответов с помощью streamSaver и записываю в загружаемый CSV-файл.
Все это прекрасно работает на моем локальном компьютере, но при развертывании на внутреннем сайте Azure я получаю приведенную ниже ошибку http, если имеется более 1 чанка.Для небольших таблиц загрузка работает нормально.
Ошибка HTTP 500.1016 - Внутренняя ошибка сервера
Это мой код обработки вызовов и ответов клиента:
handleDownloadData = () => {
const streamSaver = require('streamsaver');
const obj = {
tableName: tableName
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(obj)
}).then(res => {
const fileStream = streamSaver.createWriteStream(tableName + '.csv');
const writer = fileStream.getWriter();
if (res.body.pipeTo) {
writer.releaseLock();
return res.body.pipeTo(fileStream);
}
const reader = res.body.getReader();
const pump = () =>
reader
.read()
.then(({ value, done }) =>
done ? writer.close() : writer.write(value).then(pump)
);
pump().then(() => {
message.destroy();
message.success('Download completed');
});
});
};
И это api узла:
app.post('/api/someurl/:someParam', (req, res) => {
let pool = mysql.createPool({
host: config.host,
user: config.username,
password: config.password,
database: config.database,
port: config.port
});
const tableName = req.body.tableName;
if (typeof tableName !== 'undefined') {
pool.getConnection(function(err, con) {
let sql = `SELECT * FROM ${con.config.database}.${tableName}`;
res.status(200);
res.setHeader(
'Content-disposition',
'attachment; filename=' + tableName + '.csv'
);
res.setHeader('Content-type', 'text/csv');
let csvStr = csv.createWriteStream({ headers: true });
// open database stream
var dbStr = con.query(sql).stream();
// connect the streams
dbStr.pipe(csvStr).pipe(res);
});
} else {
res.send([]);
}
});
Существует ли какая-либо причина, по которой это может произойти сбой в Azure или через удаленный сервер в целом?Диагностическая консоль Kudo не показывает ошибок.