2017-05-25 3 views
1

Ich tryng eine Datei hochzuladen und die Upload geht ok! Das Problem ist, wenn ich versuche, eine Datei hochzuladen, die nicht gemäß der Behandlung von fileFitler akzeptiert wird. Ich möchte einen Fehler in der Konsole erhalten oder den Benutzer auf die Rückseite umleiten, aber ich erhalte nur einen Fehler auf dem Browser: kann nicht lesen Eigenschaftsdateiname von undefiniert lesen.Express - multer Filefilter Fehlerbehandlung

Aber, wenn ich einige Erweiterung hochladen, die akzeptiert wird, geht in Ordnung!

Hier ist mein Code:

const mongoose = require('mongoose'); 
const multer = require('multer'); 
const uuidV4 = require('uuid/v4'); 
const Video = require('../models/videoModel'); 


function fileFilter(req, file, cb){ 
    const extension = file.mimetype.split('/')[0]; 
    if(extension !== 'video'){ 
     return cb(null, false), new Error('Something went wrong'); 
    } 
    cb(null, true); 
}; 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, './uploads') 
    }, 


    filename: function (req, file, cb) { 
     const newName = uuidV4(); 
     const extension = file.mimetype.split('/')[1]; 
     cb(null, newName +`.${extension}`);  
    } 
}); 

var upload = multer({ storage: storage, fileFilter: fileFilter}); 
exports.uploadVideo = upload.single('file'); // the single param should be the name of the file input form 

exports.CreateVideo = (req, res) => { 
    const newVideo = {title: req.body.title, path: req.file.filename}; 
    Video.create(newVideo, function(err, result){ 
     if(err){ 
      console.log('Não foi possível realizar o upload do vídeo.' + err); 
     } 
     else{ 
      console.log('Vídeo upado com sucesso!'); 
      res.redirect('/'); 
      console.log(result); 
     } 
    }) 
}; 

exports.Home = (req, res) =>{ 
    res.render('index'); 
}; 

exports.ShowVideos = (req, res) =>{ 
    Video.find({}, function(err, result){ 
     if(err){ 
      res.redirect('/'); 
     } 
     else{ 
      res.render('video', {videoData:result}); 
     } 
    }) 
}; 
+0

Könnten Sie die Route setzen, wo Sie die 'uploadVideo' anrufen? –

+0

route.post ('/ upload', videoController.uploadVideo, videoController.CreateVideo); –

Antwort

1

Der Fehler auf der Konsole, könnten Sie Ihre fileFilter ändern und einen Fehler an die cb Funktion übergeben. Siehe:

function fileFilter(req, file, cb){ 
    const extension = file.mimetype.split('/')[0]; 
    if(extension !== 'video'){ 
     return cb(new Error('Something went wrong'), false); 
    } 
    cb(null, true); 
}; 

Hoffe es hilft !!

Verwandte Themen