import {NextFunction, Request, Response} from "express"; import formidable, {Options} from "formidable"; import {FileError, ValidationBag} from "./db/Validator.js"; import Middleware from "./Middleware.js"; export default abstract class FileUploadMiddleware extends Middleware { protected abstract getFormidableOptions(): Options; protected abstract getDefaultField(): string; public async handle(req: Request, res: Response, next: NextFunction): Promise { const form = formidable(this.getFormidableOptions()); try { await new Promise((resolve, reject) => { form.parse(req, (err, fields, files) => { if (err) { reject(err); return; } req.body = fields; req.files = files; resolve(); }); }); } catch (e) { const bag = new ValidationBag(); const fileError = new FileError(String(e)); fileError.thingName = this.getDefaultField(); bag.addMessage(fileError); next(bag); return; } next(); } }