CNode

can't set headers after they are sent 错误。

问答
Eelevensky发布于10 年前最后回复10 年前10 回复10613 浏览0 收藏

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)

L
liuhuatao#1·10 年前

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

B
backcj#2·10 年前

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

E
elevensky#3·10 年前
引用 liuhuatao是不是你判断里面又写了res.send呢

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

E
elevensky#4·10 年前
引用 backcj前面res.send的地方加个return。 查查看有没有两个并行的异步方法同时res.send了。

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

J
jiangli373#5·10 年前

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

E
elevensky#6·10 年前
引用 jiangli373可能是因为后面的执行的时候,执行了prop err里面的操作,然后又执行了下面的那个res.staus(200).send()了

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

E
elevensky#7·10 年前

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

Q
qxl1231#8·10 年前

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

return;

L
liuhuatao#9·10 年前

3CC9.tmp.jpg 两个res.send

L
liuhuatao#10·10 年前

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

参与回复
登录后即可参与回复。登录