Я разработал приложение в Node.js, и мне нужно загрузить необработанные данные из базы данных noSQL в облаке в формате CSV (Cloudant noSQL - IBM Cloud). Cloudant позволяет мне загружать все данные из базы данных через API . Я хочу, чтобы пользователь мог загрузить этот же файл, но через мое приложение Node.js . То, что я сделал, направил ответ от API базы данных на ответ клиента. Это прекрасно работает, когда я делаю это локально, но когда я загружаю приложение в IBM Cloud и пытаюсь загрузить тот же файл (40 МБ) никогда не загружается (но он работает с небольшими файлами, например 5 МБ).
Я пробовал 3 разных подхода, один с модулем запроса, а два других с модулем https.
1. Модуль запроса
request({
url: database.credentials.url + path,
method: 'GET'
}).pipe(res);
2. Модуль HTTPS (1-я попытка)
res.setHeader('content-Type', 'text/csv');
res.setHeader('transfer-encoding','chunked');
res.setHeader('strict-transport-security','max-age=31536000');
https.get(database.credentials.url + path, (csv_res) => {
console.log('Download raw data db headers');
console.log(csv_res.headers);
csv_res.on('data', (d) => {
res.write(d);
process.stdout.write(".");
});
csv_res.on('end', () => {
res.end();
});
}).on('error', (e) => {
console.error(e);
});
3. Модуль Https (вторая попытка)
var options = {
hostname: database.credentials.host,
port: 443,
path: path,
method: 'GET',
headers: {
'Authorization': 'Basic ' + new Buffer(database.credentials.username + ':' + database.credentials.password).toString('base64')
}
};
var proxy = https.request(options, function (csv_res) {
console.log(csv_res.headers)
res.writeHead(csv_res.statusCode, csv_res.headers)
csv_res.pipe(res, {
end: true
}).on('error', (e) => {
console.log("ERROR piping to res: " + e)
})
});
req.pipe(proxy, {
end: true
}).on('error', (e) => {
console.log("ERROR piping from req" + e)
})
Когда я запускаю приложение локально, файл загружается, но когда я делаю это в облаке, файл никогда не загружается, и через некоторое время браузер показывает файл с ошибкой в сети. Почему это происходит?