Bläddra i källkod

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

vian 4 år sedan
förälder
incheckning
38bc745ffc
1 ändrade filer med 31 tillägg och 22 borttagningar
  1. 31 22
      modules/pm/facade/pm_facade.js

+ 31 - 22
modules/pm/facade/pm_facade.js

@@ -2477,29 +2477,37 @@ async function downLoadProjectFile(info) {
     return result;
 }
 
-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 importProjects(data,{session:info.session},info.updateData);
-            if(result.error == 1){
-                doc.errorMsg = result.msg;
+async function doDownLoadAndImport(privateDownloadUrl, info) {
+    let stream = fs.createWriteStream(path.join(__dirname, "../../../tmp/" + info.key));//
+    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("文件[" + info.key + "]下载完毕");
+            let doc = { status: "finish" };
+            try {
+                let data = fs.readFileSync(stream.path, 'utf-8');
+                let result = await importProjects(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){
@@ -2552,6 +2560,7 @@ async function downloadFileSync(key) {
     const stream = fs.createWriteStream(filePath);
     return new Promise((resolve, reject) => {
         request(privateDownloadUrl)
+            .on('error', reject)
             .pipe(stream)
             .on('close', () => {
                 // 读取文件返回字符串
@@ -2606,7 +2615,7 @@ async function handleImportInterface(key, session) {
         const projectID = await importProject(importData, userID, compilationID, overWriteUrl);
         doc.projectID = [projectID];
     } catch (err) {
-        doc.errorMsg = typeof err === 'string' ? err : '导入接口失败,请检查接口文件!';
+        doc.errorMsg = typeof err === 'string' ? err : err.toString();
         doc.status = 'error';
     } finally {
         await importLogsModel.update({ key }, doc);