,您需要处理已经发送的标题
我有一个HTTP服务器,它将始终导致HTTP超时,例如
const server = http.createServer((req, res) => {
setTimeout(() => {
res.writeHead(200);
res.write('OK');
res.end();
}, 2000);
});
server.setTimeout(1000);
server.on('timeout', (socket) => {
// How to produce a custom HTTP response here?
});
http服务器"超时"事件带有socket
参考。如何使用socket
编码HTTP响应?
我知道我可以自己缝制响应,例如
server.on('timeout', (socket) => {
socket.write([
'HTTP/1.1 408 Request Timeout',
'Connection: close'
].join('n') + 'nn');
socket.end();
});
但是有没有一种方法可以使用HTTP响应接口,即writeHead
/write
/end
?
您可以在响应对象上使用settimeout函数。考虑这个简单的例子:
const http = require('http');
const port = 3000;
const requestHandler = (req, res) => {
res.setTimeout(Math.random() * 2500, () => {
res.writeHead(408);
res.end();
});
setTimeout(() => {
if (res.headersSent) {
return;
}
res.writeHead(200);
res.write('OK');
res.end();
}, 2000);
};
const server = http.createServer(requestHandler);
server.listen(port, (err) => {
if (err) {
return console.log('an error happened', err)
}
console.log(`server is listening on ${port}`)
});
如果您在Web浏览器中调用localhost:3000
,则现在可以看到200个错误或408错误。请注意,如果随机超时小于2000 ms。