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.
})
})
推荐阅读
- laravel - Laravel Sail 在 Ubuntu 20.04 LTS 中无法正常工作
- python - 将 3d numpy 数组分成 2 组 python
- latex - 捕获的 MiKTeX 异常:Unknown MiKTeX exception with asymptote
- jquery - 从 JSON 填充下拉列表
- node.js - 如何将值从 reactjs 发布到 expressJs
- java - 调用paint方法时JLabel不显示
- java - 检测用户何时按下删除键
- python - 通过 django 管理问题将图像保存在媒体文件夹中
- python - 如何从字符串中查找和显示某些文本?
- c - 什么是 C 调用约定标准?