Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测busboy意外停止的上载流_Javascript_Node.js_File Upload_Stream_Busboy - Fatal编程技术网

Javascript 如何检测busboy意外停止的上载流

Javascript 如何检测busboy意外停止的上载流,javascript,node.js,file-upload,stream,busboy,Javascript,Node.js,File Upload,Stream,Busboy,我有一个将文件上传到mongodb的过程,这很好。但我有一个大问题。如果由于某种原因导致连接丢失(客户端浏览器关闭、互联网连接不良、电源关闭等),我没有任何指示,总线男孩/req流也不会触发任何事件,导致承诺在一段时间后未处理错误。当我通过上传并立即关闭浏览器进行测试时。我看到很少有文件上传到mongodb。批处理中100个文件中大约有10个。我没有迹象表明最后一个是否已完全上传,也没有事件以resolve/reject响应。代码: static upload (req) { retur

我有一个将文件上传到mongodb的过程,这很好。但我有一个大问题。如果由于某种原因导致连接丢失(客户端浏览器关闭、互联网连接不良、电源关闭等),我没有任何指示,总线男孩/req流也不会触发任何事件,导致承诺在一段时间后未处理错误。当我通过上传并立即关闭浏览器进行测试时。我看到很少有文件上传到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);
    });
}

我刚发现。要知道是否发生了意外的流/请求结束,您需要侦听req.connection('error'…)事件,如:

req.connection.on('error', function (error) {
    //do something like cancelling the mongodb session ...
    reject(error)
});