我有一个上传文件到mongodb的过程,运行良好。但我有一个大问题。如果由于某种原因连接丢失(客户端浏览器关闭,互联网连接不良,断电等),我没有任何指示,并且服务生/请求流在一段时间后不会触发导致promise not handled错误的事件。当我通过立即上传和关闭浏览器来测试它的时候。我发现上传到mongodb的文件很少。大概每100个文件中就有10个。我不知道最后一个是否完全上传,也没有事件响应resolve/reject。代码:
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);
});
}发布于 2020-01-12 08:23:55
我就知道了。要知道是否发生了意外的流/请求结束,您需要侦听错误(‘req.connection’...)事件,如:
req.connection.on('error', function (error) {
//do something like cancelling the mongodb session ...
reject(error)
});https://stackoverflow.com/questions/59699151
复制相似问题