2017-10-19 11 views
0

J'essaie de faire quelque chose de difficile ici, je télécharge un fichier avec multer avec succès dans MemoryStorage. Le point est que je dois prendre le fichier de la mémoire et l'envoyer à un autre serveur. Voici ce que je fais:Téléchargement de fichiers avec 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!" 
     }); 
    } 
}); 

En utilisant ce code, je reçois l'erreur:

write after end

Toutes les solutions?

+0

Est-ce que cette erreur vient avec une trace de la pile? Quels bits de la consignation de votre console voyez-vous avant le message d'erreur? L'erreur est-elle enregistrée dans le cadre de votre journalisation 'N Enviado'? – skirtle

+0

Oui, est-ce que "write after end" – erickles

Répondre

0

Au lieu de res.send() essayer d'utiliser res.write() et utiliser une res.send() à la fin de votre code où vous pensez que vous avez terminé tous les traitements, et ce res.send() devrait suivre avec un res.end()

Hope this helps !.

+0

Avez-vous un code snnipet? Parce que je fais comme ça dans toutes mes routes ... – erickles

0

j'ai changé pour js demande, faire de cette façon, fonctionne très bien:

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 
        });            

      } 

     });