Express - multer fileFilter 错误操作

Express - multer fileFilter error handling

我正在尝试上传文件,上传正常!问题是当我尝试上传一些根据我的 fileFitler 处理不被接受的文件时。我想在控制台中收到一些错误或将用户重定向到后页,但我只是在浏览器上收到错误:无法读取未定义的读取 属性 文件名。

但是,如果我上传一些被接受的扩展,就没问题!

这是我的代码:

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

如果控制台出现错误,您可以更改 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);
};

希望对您有所帮助!!