2017-08-26 4 views
2

J'utilise Multer pour créer un système de fichiers upload. J'ai suivi les instructions de la page Github mais ça ne marche pas. Je reçoisLe téléchargement Multer n'est pas une fonction

const express= require('express'); 
const app = express(); 
const multer = require('multer'); 

const storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, '/uploads'); 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()); 
    } 
}); 

const upload = multer({ storage: storage }); 


app.post('/editPhoto',upload.single('avatar'),function(req,res,next){ 
    upload(req,res,function(err){ 
     if(err){ 
     res.json({success:false,message:err}); 

     } 
     else{ 
     res.json({success:true,message:"Photo was updated !"}); 
     } 

    }); 
}); 

Je reçois TypeError: upload is not a function

Qu'est-ce que je fais mal?

EDIT

Je l'ai fait comme vous avez dit et comme le doc dit.

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, './uploads'); 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()); 
    } 
}); 

app.post('/editPhoto',function(req,res,next){ 

    var upload = multer({ storage:storage}).single('userPhoto'); 
    upload(req,res,function(err){ 
     console.log(req.file); 
     if(err){ 
     res.json({success:false,message:err}); 
     } 
     else{ 
     res.json({success:true,message:"Photo was updated !"}); 
     } 
    }); 
}); 

req.file est définie

et quand j'essaie comme ça

var upload = multer({ storage:storage}); 

app.post('/editPhoto',function(req,res,next){ 
    upload(req,res,function(err){ 
     console.log(req.file); 
     if(err){ 
     res.json({success:false,message:err}); 
     } 
     else{ 
     res.json({success:true,message:"Photo was updated !"}); 
     } 
    }); 
}); 

je reçois le téléchargement est pas une fonction

+2

S'il vous plaît lire multer doc correctement https://www.npmjs.com/package/multer soit vous devez utiliser 'upload.single ('avatar')' ou 'upload (req, res, function (err) { '.' upload.single ('avatar') 'est déjà téléchargé votre fichier à la déstionation maintenant vous pouvez accéder à ce fichier à l'intérieur de votre route avec le' req.file' – Aabid

+0

Regardez cette réponse https://stackoverflow.com/a/45755235/7635845 –

+0

S'il vous plaît regarder la modification –

Répondre

2

Comme @Aabid dit dans les commentaires vous ne serez pas besoin d'utiliser à la fois, le middleware multer et télécharger dans le contrôleur.

Vous pouvez utiliser:

app.post('/editPhoto', upload.single('avatar'), (req, res, next) => { 
    // here in the req.file you will have the uploaded avatar file 
}) 

Ou vous pouvez utiliser:

app.post('/editPhoto', (req, res, next) => { 
    upload(req, res, function (err) { 
    if (err) { 
     // This is a good practice when you want to handle your errors differently 

     return 
    } 

    // Everything went fine 
    }) 
}) 

Vous utilisez l'une des 2 méthodes, pas les deux en même temps.

+0

S'il vous plaît voir la modifier –