该问题通常是因为busboy中间件未被正确配置或使用,导致在处理multipart/form-data请求时出错。
以下是一个可用的示例代码,使用busboy中间件处理表单上传文件:
const express = require('express');
const path = require('path');
const busboy = require('busboy');
const fs = require('fs');
const app = express();
// 配置路由处理器
app.post('/upload', (req, res) => {
const bb = new busboy({ headers: req.headers });
// 通过busboy监听file事件,处理上传的文件
bb.on('file', (fieldname, file, filename) => {
const saveTo = path.join(__dirname, 'uploads', filename);
// 将上传的文件保存到磁盘上
file.pipe(fs.createWriteStream(saveTo));
});
bb.on('field', (fieldname, val) => {
// 处理其它非文件类型的表单字段,此处省略
});
bb.on('finish', () => {
// 处理完成,返回成功响应
res.end('Upload complete');
});
// 将表单请求传递给busboy中间件处理
req.pipe(bb);
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
在上述代码中,我们通过busboy中间件来处理表单文件上传,使用了busboy的file
事件来处理上传的文件,而用field
事件来处理其它的非文件表单数据,最后使用finish
事件将处理完成的上传请求响应给客户端。
使用以上示例代码可解决busboy on field and on file not firing问题。