发送响应时触发ERR_HTTP_HEADERS_SENT错误,请问成因是什么
ERR_HTTP_HEADERS_SENT错误的成因
这个错误的核心是重复发送HTTP响应,具体到你的代码逻辑:
- 当你调用
res.json([{"message":${question}}])时,Express已经完成了整个响应流程:它会自动设置Content-Type: application/json响应头,把数据序列化为JSON字符串,然后将完整的响应发送给客户端。此时客户端已经收到响应,HTTP连接的头信息已经发送完毕,无法再修改或重复发送。 - 你把
res.json()的返回值赋值给response并return response,而Express的规则是:如果请求处理器返回了值,框架会尝试基于这个值再次生成并发送响应。这就导致框架试图再次设置响应头、发送响应,但此时响应已经发送过了,直接触发「Cannot set headers after they are sent to the client」错误。
从控制台输出也能佐证:GET /question 200说明第一次响应已经成功发送,之后的错误就是因为框架尝试发送第二次响应导致的。
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

