不清楚哪里的问题:can't not set headers after they are sent
发布于 8 年前 作者 ZhangHang-z 4153 次浏览 来自 问答
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
});

当上传第二个文件的时候,报错: QQ图片20160808124837.png

前端用的是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里的

QQ图片20160808143713.png

formidable parse函数的源码,没深入看,没看明白,也许是因为这种原因: QQ图片20160808143857.png

3 回复

这个你只能用断点去调试看看了,肯定是哪个地方返回了两次,没做好处理

res.status(200).send(“res post”); 你把这句注释掉试试。

res.status(200).send(“res post”); 把这个改成res.json({success:1});

回到顶部