首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用busboy检测上传流意外停止

如何用busboy检测上传流意外停止
EN

Stack Overflow用户
提问于 2020-01-12 06:21:22
回答 1查看 183关注 0票数 1

我有一个上传文件到mongodb的过程,运行良好。但我有一个大问题。如果由于某种原因连接丢失(客户端浏览器关闭,互联网连接不良,断电等),我没有任何指示,并且服务生/请求流在一段时间后不会触发导致promise not handled错误的事件。当我通过立即上传和关闭浏览器来测试它的时候。我发现上传到mongodb的文件很少。大概每100个文件中就有10个。我不知道最后一个是否完全上传,也没有事件响应resolve/reject。代码:

代码语言:javascript
复制
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);
    });
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-12 08:23:55

我就知道了。要知道是否发生了意外的流/请求结束,您需要侦听错误(‘req.connection’...)事件,如:

代码语言:javascript
复制
req.connection.on('error', function (error) {
    //do something like cancelling the mongodb session ...
    reject(error)
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59699151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档