У меня есть процесс загрузки файлов в mongodb, который работает нормально. Но у меня есть одна большая проблема. Если по какой-либо причине соединение потеряно (клиентский браузер закрыт, плохое соединение inte rnet, отключено питание и c.), У меня нет никаких указаний, и потоковая передача busboy / req не запускает никаких событий, которые приводят к ошибке обещания, не обработанной через некоторое время. Когда я тестирую его, немедленно загружаю и закрываю браузер. Я вижу, что несколько файлов были загружены на mongodb. Что-то вроде 10 из 100 файлов в пакете. У меня нет никаких указаний на то, был ли последний загружен полностью, и нет событий, чтобы ответить разрешением / отклонением. Код:
static upload (req) {
return new Promise((resolve, reject) => {
const docIds = [];
const busboy = new Busboy({ headers: req.headers });
const gridFSBucket = MongoDb.GridFSBucket({
chunkSizeBytes: 64 * 1024,
bucketName: 'bucketFiles',
writeConcern: {w: 1}
});
busboy.on('file', function (fieldName, file, fileName, encoding, mimeType) {
const bucketStream = gridFSBucket.openUploadStream(fileName, { metadata: { encoding, mimeType} });
file.on('error', function () {
// Never hitting that
reject(error);
});
file.pipe(bucketStream)
.on('error', function (error) {
// Never hitting that
reject(error);
})
.on('finish', function (doc) {
docIds.push(doc._id);
});
});
busboy.on('error', function (error) {
// Never hitting that
reject(error);
});
busboy.on('finish', function () {
//Everything uploaded BUT
//if connection lost never hitting that
resolve(docIds);
});
req.on('error', function (error) {
// Never hitting that
reject(error);
});
req.pipe(busboy);
});
}