can't set headers after they are sent 错误。
发布于 8 年前 作者 elevensky 10013 次浏览 来自 问答

1.场景。 做了一个ajax post数据的验证的功能。

	$.ajax({
		type: "POST",
		url: url,
		data: $("#sendForm").serialize(),
		success: function(data) {
		},
	})

后端接收代码: QQ20160804-1@2x.png

第一次点击post后验证是正常返回的,后面在重复点击就会报错: 服务器响应: 500 Can’t set headers after they are sent. 查了下是重复发送res.send了,不知道代码哪里有问题,求大神指点。

10 回复

是不是你判断里面又写了res.send呢

前面res.send的地方加个return。 查查看有没有两个并行的异步方法同时res.send了。

@liuhuatao 判断就是我展开的那个邮箱参数的那个,emit了res.send.

@backcj 加了也是一样,下面的res.send应该跑不到,即使我溢出了下面的,同一个请求过来,还是500. 调试的,每次post过来都能emit到prop_err,但是就是会返回500那个错误。

可能是因为后面的执行的时候,执行了prop_err里面的操作,然后又执行了下面的那个res.staus(200).send()了

@jiangli373 我在所有调用的res.send的前面都console.log了不同的值,命令行里只显示了一个。不知道到底哪里重复了。

查到原因。用的eventproxy 做的流程控制,原生的直接res.send错误信息就不会报错了。不知道是不是eventproxy的原因。

这个问题我最近也遇到了哈哈,最后原因你会发现都是自己逻辑没有做好,最无脑的办法是,res.send之后,写一个

return;

3CC9.tmp.jpg 两个res.send

表单验证不要放在后台做 很蛋疼的

回到顶部