node.js - 如何在 multer 中捕获错误

标签 node.js multer

我已阅读 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 语句的位置。

最佳答案

使用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.
  })
})

关于node.js - 如何在 multer 中捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173411/

相关文章:

javascript - 在 Express Route 中使用 Multer? (使用 MEANJS)

node.js - 为什么npx每次都安装webpack?

javascript - 从浏览器录制视频并流式传输到 Youtube/Twitch 时,如何使用 ffmpeg 添加音频?

node.js - Nodejs multer 选项不会触发

javascript - 如何创建 Express api 可执行文件

node.js - Multer 返回空响应

node.js - 如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

mysql - 如何使用 NodeJS 更新数据?

node.js - Mongoose 在特定记录后查找 n 条记录

node.js - 使用nodemailer/sendgrid上传多个文件