【问题标题】:Multer handle error, problem with typescript typesMulter 句柄错误,打字稿类型问题
【发布时间】:2021-03-04 20:47:09
【问题描述】:

我有以下代码:

import multer from "multer";
const upload = multer().single('file');
router.post('/add', async (req, res) => {
    upload(req, res, async (err: any) => {
        if (err) {
            res.status(500).send(err.toString())
        }
        else {
            res.status(200).send(await addMedia(req.file.filename))
        }
    })
});

我正在尝试确定类型,因此我想将any 替换为适当的错误类型。当我尝试将其替换为 MulterError 时,出现以下错误:

'(err: MulterError) => Promise' 类型的参数不能分配给'NextFunction' 类型的参数。参数 'err' 和 'deferToNext' 的类型不兼容。类型“字符串”不可分配给类型“MulterError”。

unknown.toString() 而不起作用。 string 确实有效,但它绝对不是正确的类型,因为记录它表明我有一个 MulterError

我也不完全理解 upload 函数的第三个参数是什么 - 所以这可能是我的问题。

【问题讨论】:

    标签: typescript express multer


    【解决方案1】:

    这就是我处理错误的方式

    const storage: multer.StorageEngine = multer.diskStorage({
        destination: (_req, _file, callback) => {
            const path = `./uploads/`;
            // creates folder if not exist
            fs.mkdirSync(path, { recursive: true });
            callback(null, path);
        },
        filename: (_req, file, callback) => {
            callback(null, new Date().toISOString() + file.originalname);
        }
    });
    
    const fileLimit = {
        fileSize: 1024 * 1024 * 10 // limits the file size to 10MB
    };
    const fileFilter = (
        _req: Request,
        file: Express.Multer.File,
        callback: FileFilterCallback
    ) => {
        // return error if the file type is not image
        if (!file || file.mimetype.split('/')[0] != 'image') {
            return callback(new Error('Only images allowed'));
        }
        callback(null, true);
    };
    
    const upload: multer.Multer = multer({
        storage: storage,
        limits: fileLimit,
        fileFilter: fileFilter
    });
    
    const galleryUpload = upload.single('galleryImage');
    // Upload gallery image
    router.post('/', async (req: Request, res: Response) => {
        galleryUpload(req, res, (err: unknown) => {
            if (err instanceof multer.MulterError) {
                // A Multer error occurred when uploading.
                return res.status(400).send({ message: err.message });
            } else if (err instanceof Error) {
                // An unknown error occurred when uploading.
                return res.status(400).send({ message: err.message });
            }
            return res.status(200).send({ message: 'Image uploaded successfully' });
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 2018-12-17
      • 2018-10-11
      • 2020-07-07
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多