2017-10-19 104 views
0

我想在這裏做一些棘手的事情,我將multer成功上傳到MemoryStorage。重點是我需要從內存中取出文件併發送到另一臺服務器。下面是我在做什麼:上傳文件與節點/ multer/axios

var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 
const multer = require('multer'); 
const FormData = require('form-data'); 

router.post('/files', upload.single('file'), function (req, res) { 

    const axios = require('axios'); 

    const url = configuration.dataHub.url + '/api/files'; 

    var config = { 
     headers: {'x-token': req.session.token, 'Content-Type': 'application/json'} 
    }; 

    const form = new FormData(); 
    form.append('file', req.file.buffer); 

    if (req.session.hasOwnProperty('token')) { 

     axios.post(url, form, config) 
      .then(response => { 

       if (response.data.success) { 
        console.log("Arquivo enviado"); 

        res.send({ 
         success: true, 
         message: 'Arquivo enviado com sucesso!' 
        }); 
       } else { 
        console.log("Arquivo nao enviado"); 

        res.send({ 
         success: false, 
         message: "Houve um problema ao enviar a ficha, verifique sua conexão ou tente novamente mais tarde." 
        }); 
       } 

      }) 
      .catch((error) => { 
       console.log("N Enviado", error.message); 
       res.send({ 
        success: false, 
        message: "Houve um problema ao enviar o arquivo, verifique sua conexão ou tente novamente mais tarde." 
       }); 
      }); 

    } else { 
     res.send({ 
      success: false, 
      session: false, 
      message: "Sua sessão expirou após 5 minutos sem uso. Faça login novamente!" 
     }); 
    } 
}); 

使用此代碼,我得到的錯誤:

write after end

此Any解決方案?

+0

這是否錯誤拿出一個堆棧跟蹤?您在錯誤消息之前看到哪些控制檯日誌記錄?錯誤是否被記錄爲'N Enviado'日誌的一部分? – skirtle

+0

是的,是「結束後寫」 – erickles

回答

0

而不是res.send()嘗試使用res.write(),並在你的代碼,你認爲你已經完成了所有的處理,結束使用一個res.send(),這res.send()應遵循的res.end()

希望這有助於!

+0

你有任何代碼snnipet?因爲我在我所有的路線中都這樣做... – erickles

0

我改要求JS,做這樣一來,工作正常:

formData = { 
      file: { 
       value: file.buffer, 
       options: { 
        filename: file.originalname, 
        contentType: file.mimetype 
       } 
      } 
     }; 

     var options = { 
      url: url, 
      headers: { 
       'x-token': req.session.token 
      }, 
      formData: formData 
     }; 

     request.post(options, function optionalCallback(err, httpResponse, body) { 

      if (err) { 
       res.send({ 
        success: false, 
        session: true, 
        message: 'There is a problem sending the files!' 
       }); 
      } else { 

       result = result.concat(JSON.parse(body)); 

       res.send({ 
         success: true, 
         session: true, 
         message: 'sucess!', 
         files: result 
        });            

      } 

     });