处理多重文件过滤器的回调

我具有编写简单的功能,可以使用Express + Multer将图像文件上传和写入服务器 现在,我想处理回调错误以返回并向客户端这样的错误消息

{success:false,message:'Only image are allowed'}

但是,在我的代码中,我得到了这样的HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Error: Only images are allowed<br> &nbsp; &nbsp;at fileFilter (C:\Users\reale\source\repos\ChamCongAPI\routes\index.js:35:29)<br> &nbsp; &nbsp;at wrappedFileFilter (C:\Users\reale\source\repos\ChamCongAPI\node_modules\multer\index.js:44:7)<br> &nbsp; &nbsp;at Busboy.&lt;anonymous&gt; (C:\Users\reale\source\repos\ChamCongAPI\node_modules\multer\lib\make-middleware.js:114:7)<br> &nbsp; &nbsp;at Busboy.emit (events.js:182:13)<br> &nbsp; &nbsp;at Busboy.emit (C:\Users\reale\source\repos\ChamCongAPI\node_modules\busboy\lib\main.js:38:33)<br> &nbsp; &nbsp;at PartStream.&lt;anonymous&gt; (C:\Users\reale\source\repos\ChamCongAPI\node_modules\busboy\lib\types\multipart.js:213:13)<br> &nbsp; &nbsp;at PartStream.emit (events.js:182:13)<br> &nbsp; &nbsp;at HeaderParser.&lt;anonymous&gt; (C:\Users\reale\source\repos\ChamCongAPI\node_modules\dicer\lib\Dicer.js:51:16)<br> &nbsp; &nbsp;at HeaderParser.emit (events.js:182:13)<br> &nbsp; &nbsp;at HeaderParser._finish (C:\Users\reale\source\repos\ChamCongAPI\node_modules\dicer\lib\HeaderParser.js:68:8)</pre>
</body>
</html>

那么,我想问一下您能帮我处理回调以返回消息吗?

这是我的代码:

var upload = multer({
    storage: storage,fileFilter: function (req,file,callback) {
        var ext = path.extname(file.originalname);
        if (ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
            return callback(new Error('Only images are allowed'));
        }
        callback(null,isValid(req));
    },});
router.post('/upload',upload.single('file'),(req,res,error) => {
        if (error)
            console.log(error);
        const file = req.file;
        console.log(req);
        if (!file) {
            return res.status(500)send({ success: false,message: "Please upload a file" });
        } 
        res.send({ success: true,fileInfo: file.path });

    });
Blackboard123 回答:处理多重文件过滤器的回调

您可以手动调用该函数,而不必使用upload.single('file')作为中间件,然后可以控制错误:

var upload = multer({
  storage: storage,fileFilter: function (req,file,callback) {
    var ext = path.extname(file.originalname);
    if (ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
      return callback(new Error('Only images are allowed'));
    }
    callback(null,isValid(req));
  },});

var uploadSingle = upload.single('file');

router.post('/upload',(req,res) => { // 3rd param of Request handler is next function,not error object
    uploadSingle(req,res,(err) => { // call as a normal function
      if (err) return res.status(500).send({ success: false,message: 'Only image are allowed' })

      console.log('save the file',req.file)

      const file = req.file;
      console.log(req);
      if (!file) {
        return res.status(500).send({ success: false,message: "Please upload a file" });
      }

      res.send({ success: true,fileInfo: file.path });
    })

  });
本文链接:https://www.f2er.com/3083759.html

大家都在问