2017-09-18 6 views
1

J'ai regardé beaucoup de réponses pour cette même question, mais je n'ai pas encore trouvé de solution de travail. J'essaie de faire une application web que vous pouvez télécharger des fichiers en utilisant express et multer, et j'ai un problème qu'aucun fichier n'est téléchargé et req.file est toujours indéfini.Node.js TypeError: Impossible de lire la propriété 'path' de undefined

Express et la version multer comme: "express": "^4.15.4", "multer": "^1.3.0"

Mon configure.js ressemble à ceci:

multer = require('multer'); 

module.exports = function(app) { 
app.use(morgan('dev')); 
app.use(multer({ 
    dest: path.join(__dirname, 'public/upload/temp')}).single('file')); 
routes(app); 
app.use('/public/', express.static(path.join(__dirname, '../public'))); 

Code Consommant ressemble à ceci:

var tempPath = req.file.path, 
     ext = path.extname(req.file.name).toLowerCase(), 
     targetPath = path.resolve('./public/upload/' + imgUrl + ext); 

     if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') { 
      fs.rename(tempPath, targetPath, function(err) { 
       if (err) throw err; 

       res.redirect('/images/' + imgUrl); 
      }); 
     } else { 
      fs.unlink(tempPath, function() { 
       if (err) throw err; 

       res.json(500, {error: 'Only image files are allowed.'}); 
      }); 
     } 

La forme ressemble à ceci:

<form method="post" action="/images" enctype="multipart/form- 
data"> 
<div class="panel-body form-horizontal"> 
    <div class="form-group col-md-12"> 
     <label class="col-sm-2 control-label" 
     for="file">Browse:</label> 
     <div class="col-md-10"> 
      <input class="form-control" type="file" 
      name="file" id="file"> 
     </div> 
    </div> 

Répondre

0

Je parie que votre message d'erreur est sur cette ligne

var tempPath = req.file.path, 

parce qu'il est la seule fois que vous demandez « chemin » comme une propriété d'un objet. Votre problème semble assez clair, vous n'avez aucun fichier dans votre requête (AKA l'objet appelé "req"). Vous devez vous connecter ou inspecter l'objet appelé req dans votre code consommateur pour vous assurer que vous avez un fichier dans la demande.

+0

Oui, vous avez raison le fichier n'est pas défini. Pouvez-vous suggérer ce qui me manque ici? – hemanik

+0

Essayez de faire ce qui suit: console.log (JSON.stringify (req)) Ensuite, regardez l'objet, il peut vous aider. Je n'ai pas assez de choses pour vous dire ce qui ne va pas, mais si je devais vérifier les noms des attributs (peut-être que vous avez fait une faute de frappe ou l'attribut que vous recherchez), je définirais plusieurs console.log pour s'assurer que ce qui est recueilli/envoyé/reçu est vraiment ce que vous pensez qu'il est. Si vous ne trouvez toujours pas, téléchargez un exemple de travail (je veux dire un runnable;)) afin que nous puissions déboguer le code. –

+0

Voici le code, https://github.com/hemanik/imgPloadr. C'est un exemple de ce [livre] (https://github.com/twang281314/frontEnd/blob/master/book/Web%20Development%20with%20MongoDB%20and%20NodeJS%2C%202nd%20Edition.pdf) – hemanik