如何在Multer自定义存储引擎前获取表单字段?
问题:Multer 表单字段解析与自定义存储引擎的顺序冲突
我当前使用 Multer 搭配自定义存储引擎实现文件上传,目标路径由请求指定。目前是从查询参数中获取 destination 及其他参数,但希望将所有输入数据整合到表单数据中。同时该目标路径需要额外验证,且验证逻辑需访问 res 和 next。
当前实现代码如下:
upload(req, res, next) { // 理想情况下应为`req.body.destination`; const destination = req.query.destination; /* 验证逻辑... */ return multer({ storage: new CustomStorage(destination), }).single('file')(req, res, next); }
但存在核心矛盾:Multer 必须先运行才能将表单数据解析到 req.body,这与我需要先验证 destination 的顺序需求冲突。
我尝试在存储引擎前运行第二个 Multer 实例——忽略文件,仅解析文本字段到 req.body,代码如下:
multer({ fileFilter: (req, file, cb) => { return cb(null, false); }, }).any();
运行后虽能访问 req.body 中的表单数据,但出现如下错误:
Error: Unexpected end of form at Multipart._final (/Users/robert/bucket/node_modules/busboy/lib/types/multipart.js:588:17) at callFinal (node:internal/streams/writable:694:27) at prefinish (node:internal/streams/writable:723:7) at finishMaybe (node:internal/streams/writable:733:5) at Multipart.Writable.end (node:internal/streams/writable:631:5) at onend (node:internal/streams/readable:693:10) at processTicksAndRejections (node:internal/process/task_queues:78:11) { storageErrors: [] }
查阅相关 issue 后降级到 Multer 1.4.3,错误虽消除,但 API 路由直接返回 400 状态码,且无任何错误信息。
请问这种场景下该如何正确获取表单字段?
内容的提问来源于stack exchange,提问作者Robert May
相关产品推荐
相关产品推荐

