2017-10-19 10 views
0

私はここで何か面倒なことをしようとしていますが、multerのファイルをMemoryStorageにアップロードしています。要点は、ファイルをメモリから取り出して別のサーバーに送信する必要があることです。ここで私はやっているものです:node/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

このための任意のソリューション?

+0

そのエラーは、スタックトレースが付属していますか?エラーメッセージの前にコンソールロギングのどのビットが表示されますか?エラーはあなたの 'N Enviado'ロギングの一部として記録されていますか? – skirtle

+0

はい、「終了後書き込み」 – erickles

答えて

0

代わりのres.send()res.write()を使用すると、あなたは、すべての処理を終えたと思うあなたのコードの末尾に1 res.send()を使用しようと、このres.send()はこのことができますres.end()

希望に従うべきです!

+0

コードスニペットはありますか?私はすべての私のルートでこれをやっているから... – 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 
        });            

      } 

     }); 
関連する問題