Node.js报错Error [ERR_HTTP_HEADERS_SENT]的解决求助
解决ERR_HTTP_HEADERS_SENT错误
问题原因
你的代码里,不管是否匹配/Hello.js请求,next()都会被执行。由于fs.readFile是异步操作,当它的回调函数发送响应时,next()已经触发了后续中间件,这些中间件可能尝试再次发送响应,导致重复设置HTTP头,从而抛出错误。
修复方案
修改代码,确保匹配到目标请求时不调用next(),仅在未匹配时执行next():
app.use(function(req, res, next) { console.log("URL: == ", req.url); if(req.url === '/Hello.js'){ fs.readFile(path.join(__dirname + '../../../dist/Hello.js'), 'utf-8', function(err, content) { if (err) { console.log("err == ", err); // 正确处理错误并发送响应 res.status(500).send('读取文件失败'); return; } res.setHeader('Content-Type', 'application/javascript'); res.type('.js'); res.send(content); }); // 提前返回,避免执行后续的next() return; } // 仅当未匹配目标请求时,传递给下一个中间件 next(); });
额外说明
- 在错误分支中,确保通过
res.status().send()发送错误响应,避免请求无响应或后续中间件重复处理。 - 在
if块末尾添加return,直接终止当前中间件函数,不会执行后面的next(),彻底避免后续中间件干扰响应发送。
内容的提问来源于stack exchange,提问作者Hdhsh
相关产品推荐
相关产品推荐

