소스 검색

fix:下载导入文件时,请求可读流和可写流错误捕获问题

vian 5 년 전
부모
커밋
64266e378d
1개의 변경된 파일28개의 추가작업 그리고 19개의 파일을 삭제
  1. 28 19
      modules/pm/facade/pm_facade.js

+ 28 - 19
modules/pm/facade/pm_facade.js

@@ -1643,27 +1643,36 @@ async function downLoadProjectFile(info) {
 
 async function doDownLoadAndImport(privateDownloadUrl,info) {
     let stream = fs.createWriteStream(path.join(__dirname, "../../../tmp/"+info.key));//
-    request(privateDownloadUrl).pipe(stream).on("close", async function (err) {
-        console.log("文件[" + info.key + "]下载完毕");
-        let doc = {status:"finish"};
-        try {
-            let data = fs.readFileSync(stream.path,'utf-8');
-            let result = await importProject(data,{session:info.session},info.updateData);
-            if(result.error == 1){
-                doc.errorMsg = result.msg;
+    request(privateDownloadUrl)
+        .on('error', async function (err) {
+            await importLogsModel.update({ key: info.key }, { status: 'error', errorMsg: err.toString() });
+        })
+        .pipe(stream)
+        .on("close", async function () {
+            console.log('close');
+            console.log("文件[" + info.key + "]下载完毕");
+            let doc = { status: "finish" };
+            try {
+                let data = fs.readFileSync(stream.path, 'utf-8');
+                let result = await importProject(data, { session: info.session }, info.updateData);
+                if (result.error == 1) {
+                    doc.errorMsg = result.msg;
+                    doc.status = "error";
+                } else {
+                    doc.projectID = result.constructionProjectID;
+                }
+            } catch (error) {
+                console.log(error);
+                doc.errorMsg = "导入失败,请检查文件!";
                 doc.status = "error";
-            } else {
-                doc.projectID = result.constructionProjectID;
+            } finally {
+                await importLogsModel.update({ key: info.key }, doc);
+                fs.unlinkSync(stream.path);
             }
-        }catch (error){
-            console.log(error);
-            doc.errorMsg = "导入失败,请检查文件!";
-            doc.status = "error";
-        }finally {
-            await importLogsModel.update({key:info.key},doc);
-            fs.unlinkSync(stream.path);
-        }
-    });
+        })
+        .on('error', async function () {
+            await importLogsModel.update({ key: info.key }, { status: 'error', errorMsg: `文件[${info.key}]下载失败,请稍后再试。` });
+        });
 }
 
 async function importProcessChecking(data){