2017-02-01 3 views
1

Je suis confronté à ce que je crois être un problème commun avec l'utilisation de types de formulaire enctype="multipart/form-data" avec ExpressJS. Sans middleware, req.body (ou bodyParser) ne gère pas ce type de formulaire et par conséquent j'envoie des valeurs null pour mes champs sur POST demandes. Mon formulaire a une section de téléchargement de fichiers, c'est pourquoi j'utilise multipart et j'utilise les modules multer et multer-s3 pour gérer les téléchargements d'images vers un seau s3, mais je ne sais pas comment utiliser multer ou un autre module pour m'aider stocker les valeurs de champ dans ma base de données Mysql (Sequelize ORM). Quelqu'un peut-il fournir des conseils quant à savoir si multer est le bon module à utiliser pour ce type de téléchargement de formulaire et me diriger vers la documentation où je peux échanger req.body avec une méthode spécifique au module?ExpressJS - Formulaire avec téléchargement de fichier Multipart causant req.body Problème

Qu'est-ce que ma forme ressemble

<form action="/app/post/create" method="post" enctype="multipart/form-data"> 
    <label for="discovery">Discovery:</label> 
    <textarea id="discovery-text-field" name="discovery"></textarea> 
    </br> 
    <label for="report-link">Link to Report:</label> 
    <input type="textarea" name="reportLink"> 
    <br /> 
    <label for="file-attachment">File Attachment:</label> 
    <input type="file" id="file-input" name="fileUpload[]" multiple> 
</form> 

Routing:

appRoutes.route('app/post/create') 

.post(function(req, res){ 

     models.Post.create({ 
      discovery: req.body.discovery, 
      reportLink: req.body.reportLink, 
      userId: req.user.userId  
     }).then(function(){ 
      req.flash('info', 'Post was successfully created.'); 
      res.redirect('/app'); 
     }); 
    }); 

Répondre

0

Je ne suis pas sûr si vous essayez d'AJAX pour envoyer des données, mais je ne pouvais pas obtenir AJAX pour envoyer multi-forme données correctement d'une manière qui ferait le bonheur de Multer. Voici ce que j'utilise avec Express et Multer. Voici une partie de JQuery que vous pouvez utiliser pour télécharger vos valeurs de formulaire sur votre serveur. Ensuite, vous pouvez manipuler vos valeurs et les stocker côté serveur, cependant, s'il vous plaît.

<script language="JavaScript"> 
    $(document).ready(function() { 
     $(".submitButton").click(function() { 
      var values = { 
       fields: $("#IDs").val() 
      }; 
      var http = new XMLHttpRequest(); 
      http.open("POST", '/express/route', true); 
      // stuff into a form 
      var form = new FormData(); 
      form.append('values', JSON.stringify(values)); 
      // send data to server 
      http.send(form); 
     }); 
    }); 
</script> 

côté serveur

app.post('/express/route', upload.array(), function (req, res, next) { 
    console.log(req.body); 
} 

Maintenant que vous avez votre (ce que je qualifierais forme simple ou sous forme non multiples) valeurs côté serveur. J'utilise Mongo pas SQL pour le moment, donc c'est aussi loin que je peux aider. Je suis sûr qu'il y a des paquets que vous pouvez installer, (je chercherais npmjs.com pour sql), cela vous permettra d'interagir avec SQL mais Mongo semble être populaire en ce moment avec NodeJS. Voici un lien que j'utilise pour référence, lors de la construction d'une pile MEAN: http://www.dotnetcurry.com/nodejs/1032/nodejs-apps-in-visual-studio-mean-stackMEAN stack Aussi utile si vous avez Visual Studio et que vous voulez que NPM soit intégré dans VS.