[nodejs]formidable的parse不执行可能的一种原因
应该有挺多人遇到了这一问题,就是formidable
的parse
无论如何也不执行,找了很多原因,尝试了很多方法,都不管用。
const formidable = require('formidable');
const form = new formidable({
multiples: true,
uploadDir: path.join(__dirname, '../ ', '../', '../', 'public', 'uploads'),
keepExtensions: true
});
form.parse(req, (err, fields, files) => {
console.log(0); // 不执行
})
我也遇到了这种情况。在parse
上选择转到定义,在formidable - parse的源码中添加console,可以看到实际上parse是执行了的,但是浏览器一直在转圈,node端也没有反应,说明这时node不知道怎么处理这个请求,一直处在等待状态。
既然不是formidable的问题,那肯定是请求有问题。
这是一个POST请求,请求由submit
button触发,由HTML的form
发出。
既然是由form发出的请求,那我们来检查一下form的配置是否正确。form如下:
<form method="POST" action="user/add">
<file/>
</form>
问题就在这里了。这里的form好像缺少一个常用的属性:enctype
。这个属性有3个取值,其中有一个值是multipart/form-data
,它的描述是:不对字符编码。当使用有文件上传控件的表单时,该值是必需的
,而我们的form里面恰恰有一个file
。
所以,给form加上这个属性试试:
<form method="POST" action="user/add" enctype="multipart/form-data">
......
问题解决了。
End