2017-05-25 156 views
1

我試着上傳一個文件,上傳就OK了!問題是當我嘗試上傳一些根據我fileFitler處理不被接受的文件時。我想在控制檯中收到一些錯誤或將用戶重定向到後臺頁面,但我只是在瀏覽器上收到錯誤消息:無法讀取未定義的讀取屬性文件名。快遞 - multer fileFilter錯誤處理

但是,如果我上傳一些被接受的擴展程序,就行了!

這裏是我的代碼:

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

你可以把你正在調用'uploadVideo'的路線? –

+0

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

回答

1

,控制檯上得到一個錯誤,你可以改變你的fileFilter並傳遞一個錯誤的cb功能。參見:

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); 
}; 

希望它有幫助!