不清楚哪里的问题:can't not set headers after they are sent
const formidable = require('formidable');
var cfg = require('../config');
var form = new formidable.IncomingForm();
form.uploadDir = cfg.APP_ROOT_PATH + '/upload';
router.post('/upload/file', function(req, res) {
form.parse(req, function (err, field, files) {
if (err) return err;
console.log(field + ':' + files);
res.status(200).send("res post");
});
return
});
当上传第二个文件的时候,报错:
前端用的是fetch
function upLoadFile(file){
var data = new FormData();
var input = document.querySelector('input[type="file"]');
data.append('photo', input.files[0]);
// data.append('username', 'cc775678');
fetch('/upload/file', {
method: 'POST',
body: data
}).then(function (res) {
alert('上传成功:' + res)
}).catch(function (ex) {
console.log(ex)
});
return;
}
我不清楚是什么问题,后端代码中return了,那么就表示这个函数执行完毕,第二个文件又怎么可能出现再次设置header呢?还是不刷新页面这两个请求会请求到同一个函数。
把res放在parse函数外就行了
router.post('/upload/file', function(req, res) {
form.parse(req, function (err, field, files) {
if (err) return err;
console.log(field, files)
});
res.status(200).json('{"message": "successful"}');
});
我不清楚为什么会这样,但教程上是直接放在parse里的
formidable parse函数的源码,没深入看,没看明白,也许是因为这种原因:
3 回复
这个你只能用断点去调试看看了,肯定是哪个地方返回了两次,没做好处理
res.status(200).send(“res post”); 你把这句注释掉试试。
res.status(200).send(“res post”); 把这个改成res.json({success:1});