【问题标题】:How to catch errors in multer如何在 multer 中捕获错误
【发布时间】:2019-12-04 10:04:43
【问题描述】:

我已阅读 multer 的文档。但是我在代码中的当前设置是不同的,这让我很难理解如何处理错误。 现在很重要,因为它发生(仅一次)文件未存储在服务器上,但代码继续将信息保存在数据库中,就好像文件的存储已经工作一样。但它可能没有。

const multer = require('multer');

var docPath = "path_to_disk_where_to_store_files";

var storage = multer.diskStorage({
    inMemory: true,
    destination: function (request, file, callback) {
        callback(null, docPath);
    },
    filename: function (request, file, callback) {
        //Just a function that creates an unique name with timestamp
        renamedFile = helpers.createUniqueName(file.originalname);
        callback(null, renamedFile);
    }
});

var fileFilter = function (req, file, cb) {
    var path = require('path');
    var ext = path.extname(file.originalname);
    if (file.mimetype !== 'application/pdf' || ext.toLowerCase() != '.pdf') {
        req.fileValidationError = 'goes wrong on the mimetype';
        return cb(null, false, new Error('goes wrong on the mimetype'));
    }
    cb(null, true);
};

const multerUploader = multer({storage: storage, fileFilter: fileFilter, limits: { fileSize: maxSize }});

router.post('/save_document',[multerUploader.single('file'),saveDocumentInDb]);

我真的不明白用于检查上传是否出错的 if 语句的位置。

【问题讨论】:

    标签: node.js multer


    【解决方案1】:

    使用multer时的错误处理请参考以下内容: https://github.com/expressjs/multer#error-handling

    您的实现将是这样的:

    const multerUploader = multer({storage: storage, fileFilter: fileFilter, limits: { fileSize: maxSize }});
    const upload = multerUploader.single('file');
    router.post('/save_document', function (req, res) {
      upload(req, res, function (err) {
        if (err instanceof multer.MulterError) {
          // A Multer error occurred when uploading.
        } else if (err) {
          // An unknown error occurred when uploading.
        }
    
        // Everything went fine and save document in DB here.
      })
    })
    

    【讨论】:

    • 谢谢。这是一个非常好的实现。
    • 你能告诉我这两种情况下正确的响应错误是什么吗?或者换句话说,如果出现 multer 错误和您将其命名为未知错误的其他错误,最佳错误状态是什么
    猜你喜欢
    • 2021-02-25
    • 2021-08-23
    • 2018-12-08
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2010-11-21
    • 2019-03-27
    相关资源
    最近更新 更多