如何处理node.js http服务器超时事件



我有一个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。

,您需要处理已经发送的标题

最新更新