TypeScript按日期范围过滤数据时触发ERR_HTTP_HEADERS_SENT错误如何解决
问题原因
- 核心报错原因:
ERR_HTTP_HEADERS_SENT是Express框架的常见错误,触发逻辑是服务端已经向客户端发送过响应后,再次调用res.send/res.json等响应方法,尝试重复设置响应头。 - 代码的核心问题是把
res.send写进了Array.filter的回调函数里:filter会遍历数组中的每一个元素,遍历第一个元素时就已经执行res.send把响应返回给了客户端,后续遍历其他元素时再次调用res.send就触发了该报错。 - 额外逻辑错误:
after变量错误赋值为req.query.before,正常应该取req.query.after参数req.query中获取的参数都是字符串类型,需要手动转为Date对象才能做日期比较
修正后代码
var before = req.query.before ? new Date(req.query.before) : undefined; var after = req.query.after ? new Date(req.query.after) : undefined; if(before && after){ var filteredData = tempData.filter(function(t){ const createTime = new Date(t.creationTime); // filter回调内仅做条件判断,不调用响应方法 return createTime >= after && createTime <= before; }); // 遍历结束拿到完整筛选结果后,再统一返回响应 res.send(filteredData); }
内容的提问来源于stack exchange,提问作者Hawanity
相关产品推荐
相关产品推荐

