2017-02-12 4 views
0

Ce que je veux faire est de télécharger des fichiers sur le serveur après quelques tests effectués au req.body. Je suis familier avec this question qui semble être le problème exact mais n'arrive pas à faire fonctionner les choses. Mon code est:Le fichier de téléchargement Multer ne fonctionne pas à l'intérieur du nœud de poste de routeur js

var express = require('express'); 
var router = express.Router(); 
var fs=require('fs') 
var multer = require('multer'); 
var config = require(__dirname +'/../config.js') 
var rootArchiveFolder = config.rootFolder 

var getFields = multer(); 

router.post('/:module', getFields.any(), (req, res, next)=> { 
    var module = req.params.module; 

    console.log("req.body", req.body); 
    console.log("req.params.module", req.params.module); 

    switch (module){ 
     case 'archive': 

    var makeDBEntry = require('../models/makeDBEntry.js'); 
     makeDBEntry.makeArchiveEntry(req.body) 
     .then(responseData => { 
      console.log("all ok") 

      var tmpdir = req.body.p_receive_date; 
      var dir = tmpdir.replace(/\//g, "-"); 
      dir = rootArchiveFolder + dir; 
      if (!fs.existsSync(dir)){ 
       fs.mkdirSync(dir); 
      } 

      var storage = multer.diskStorage({ 
       destination: function(req,file,cb){ 
        cb(null,dir); 
       }, 
       filename: function(req,file,cb){ 
        // cb(null,req.body.p_doc_no); 
        cb(null, req.files[0].originalname); 
       } 
      }) 
      var upload = multer({storage:storage}); 
      // upload.any(req, res, next); doesnt seems to work 
      //how can i upload my files here after all my test are done? 

      res.end(); 
     }) 
     .catch(e => { 
      res.status(500).send(response.message); 
      console.log(e.message); 
     }); 
     res.send("ok") 
     break; 
    } 
}); 

Qu'est-ce que je manque ici ??

+0

Vous pouvez voir et exemple avec multer ici: http://stackoverflow.com/questions/31748936/how-to-send-files-with-superagent/39938312#39938312 – Hosar

Répondre

0

La façon dont j'ai réussi à le résoudre est télécharger les fichiers dans un dossier tmp, puis faire les vérifications et si vrai, déplacez les fichiers dans le bon dossier, sinon je les supprime. C'est le meilleur que je puisse faire .. Je sais que le multer.js fournit du code qui doit être exécuté en tant que middleware, donc le point de lancer un test et de télécharger après n'est pas cohérent avec la logique middleware. Je pense que je cherche une porte dérobée ici. La question reste ..

+0

Dans cette réponse SO, J'ai montré comment télécharger un fichier à un emplacement certain en utilisant multer avec un point de terminaison post http://stackoverflow.com/questions/34590386/multer-create-new-folder-with-data/34936277#34936277 – Raf