formidable
包来处理服务器上的文件上传。
这是我的 express.js
应用程序代码:
var formidable = require("formidable"),
http = require("http"),
util = require("util");
app.post("/admin/uploads", function (req, res) {
console.log(req.files, req.fields); //It prints
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
console.log("Inside form parse."); //its not printing
console.log(err, fields, files); //its not printing
});
form.on("file", function (name, file) {
console.log("file=" + file);
}); //its not printing
form.on("error", function (err) {
console.log(err);
}); //its not printing
form.on("aborted", function () {
console.log("Aborted");
}); //its not printing
console.log(form); //it prints
});
在上面的代码中,
form.parse
和form.on
回调永远不会运行。我该如何解决这个问题?
在将 Next.js API 路由与 Formidable 一起使用时,我遇到了同样的问题。正如另一个答案指出的那样,您必须删除正文解析器。在 Next.js 中,您可以导出
config
对象并禁用正文解析。
// /pages/api/form.js
import { IncomingForm } from "formidable";
export default function handler(req, res) {
// formidable logic
}
// VV important VV
export const config = {
api: {
bodyParser: false,
},
};
请注意,如果您的项目使用较新的
app
路由器,则不需要 Formidable;您可以在服务器操作/突变中使用 FormData
处理表单提交。
您可能需要删除正文解析器
delete app.use(express.bodyParser());
在所有
form.parse(...)
事件之后致电 on(...)
。
app.post('/admin/uploads', function(req, res) {
var form = new formidable.IncomingForm();
form.on('file', function(name, file) { });
form.on('error', function(err) { });
form.on('aborted', function() { });
form.parse(req, function(err, fields, files) { });
});
请添加错误处理程序并发送错误消息,否则很难得到答案。
form.on('error', function(err) { console.log(err); });
form.on('aborted', function() { console.log('Aborted'); });
请参阅
formidable
文档:doc
我忘记将 enctype="multipart/form-data" 添加到我的 html 表单中,也许这会对某人有所帮助:)
即使您删除
body-parser
并使用 express.json()
等...您也会遇到同样的错误。
问题是
express.raw()
造成了麻烦,将其删除即可工作!