Sti*_*boi 5 runtime-error http-headers node.js express server
我正在使用express 构建一个简单的服务器。一切正常,但每次我尝试硬刷新(cntr + R)我的页面时,我都会在控制台中收到这个恼人的错误。
错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头
这是代码:
app.get('/index', (req, res) => {
const filePath = path.join(__dirname, 'public', 'index.html');
console.log(res.headersSent);
res.sendFile(filePath);
});
Run Code Online (Sandbox Code Playgroud)
console.log (res.headersSent)用于检查是否确实未设置标头(每次都会记录 false)。
我尝试发送一个简单的 JSON 而不是文件,并且没有发生错误:
app.get('/index', (req, res) => {
const filePath = path.join(__dirname, 'public', 'index.html');
console.log(res.headersSent);
res.json({status: 'All good'});
});
Run Code Online (Sandbox Code Playgroud)
仅当我使用 res.sendFile() 时才会出现该错误。一旦加载,index.html将请求一个index.js文件。也许这就是问题所在?但这不是一个不同的要求吗?
谢谢你!
编辑我尝试检查 sendFile() 回调函数中的错误。它是未定义的,即使控制台不断吐出“无法设置标头”错误
sendFile是异步函数,因此您需要在引擎读取文件后发送响应,但json是同步函数(这就是为什么它没有抛出错误)。
换句话说,您需要发送回调的响应,如下所示:
app.get('/index', (req, res) => {
const filePath = path.join(__dirname, 'public/index.html');
res.sendFile(filePath, function(err) {
if (err) {
return res.status(err.status).end();
} else {
return res.status(200).end();
}
});
});
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请阅读以下内容:
| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |