Express处理/search路由查询字符串时报ERR_HTTP_HEADERS_SENT错误如何解决
错误产生原因
你遇到的Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client是Express开发中的高频错误,核心触发逻辑是:同一个HTTP请求的处理流程中,多次调用了res.send/res.json/res.redirect这类结束响应的方法。
对应你的代码逻辑:当访问无q查询参数的/search路径时,if(!q)判断成立,首先执行了res.send('NOTHING FOUND IF NOTHING SEARCHED'),此时已经完成响应发送、连接关闭。但由于你没有在if代码块中添加终止逻辑,代码会继续向下执行,又触发了第二次res.send,因此抛出该错误。
修复方案
有两种常用修复方式,任选其一即可:
方案1:在if分支的响应后添加return终止函数执行
修改后的路由代码如下:
app.get('/search', (req, res) => { const { q } = req.query; if(!q) { // 加return让函数执行到这里就直接退出,不会继续运行后续代码 return res.send('NOTHING FOUND IF NOTHING SEARCHED') } res.send(`<h1>Search results for: ${q}</h1>`) })
方案2:使用if-else分支隔离两种响应逻辑
让两个res.send分别属于互斥的分支,同一请求只会执行其中一个:
app.get('/search', (req, res) => { const { q } = req.query; if(!q) { res.send('NOTHING FOUND IF NOTHING SEARCHED') } else { res.send(`<h1>Search results for: ${q}</h1>`) } })
内容的提问来源于stack exchange,提问作者MO_Hamed
相关产品推荐
相关产品推荐

