2017-08-17 3 views
0

Dans mon application Express qui utilise Multer, je souhaite recevoir des données de formulaire contenant ou non un fichier, puis le traiter. Cette donnée de formulaire contient d'autres données comme, par exemple, un nom que je veux ajouter à la base de données si une image est jointe ou non.Comment puis-je continuer à gérer une requête dans Express.js s'il n'y a pas d'image détectée par Multer?

app.js (Node/Express/Multer)

app.post 
(
    '/create_item', 
    multer({dest : 'temp/'}).single('image'), 
    function(req, res, next) 
    { 
     // I want to do stuff here with the req.body, 
     // even if there wasn't a file attached for Multer to process. 
     // As of now, it just shuts down the request when there is no file. 

     // When there is an image attached there is no problem. 
    } 
) 

Ainsi, Multer ne semble pas permettre la poursuite de la demande s'il n'y a pas un fichier joint. Y a-t-il un moyen de continuer à faire des choses sur le serveur même s'il n'y a pas d'image attachée pour que Multer fasse quelque chose?

J'ai fait beaucoup de recherche et de réflexion pour trouver une solution, mais je ne pouvais malheureusement pas en trouver une. Si vous pouvez m'aider, ce serait très apprécié!

+1

Peut-être que vous avez juste besoin de mettre à jour votre version de multer. J'ai couru votre code sur mon ordinateur et cela a fonctionné. Sinon, utilisez ma réponse ci-dessous. – OwChallie

+0

Vous aviez probablement raison dans ce commentaire, même si ma version fonctionne bien. J'ai découvert que cela n'arrive que lorsque j'envoie une requête à partir d'une page spécifique (côté client). Il est probablement "juste" quelques vars désordonnés dans la page de ce javascript interférant avec les données de formulaire: serveur-côté/Multer est très bien. Merci, j'ai appris peut-être que ce n'était pas possible avec Multer. –

Répondre

0

Peut-être un peu laide d'une solution de contournement, mais essayez ceci. Créez notre propre middleware qui détecte si un fichier est transmis ou non. Si un fichier arrive, utilisez le mode murmure, sinon, ignorez-le.

app.post 
(
    '/create_item', 
    function(req, res, next) { 
     req.rawBody.indexOf('filename=') === -1 ? next() : multer({dest : 'temp/'}).single('image')(req, res, next); 
    }, 
    function(req, res, next) 
    { 
     // I want to do stuff here with the req.body, 
     // even if there wasn't a file attached for Multer to process. 
     // As of now, it just shuts down the request when there is no file. 

     // When there is an image attached there is no problem. 
    } 
)