Koa-设置传入请求的超时

问题描述

我正在尝试使用自定义中间件为传入的请求设置超时,但是没有引发错误,似乎setTimeout过期后不会调用中间件。

这是我正在尝试的代码

app.use(async (ctx,next) => {
    setTimeout(() => {
        if (!ctx.headeRSSent) {
            ctx.throw(408,`processing time toke longer than ${config.PROCESSING_TIMEOUT},request was timedout`);
        }
    },config.PROCESSING_TIMEOUT);
    await next();
});

解决方法

Koa(或节点的http服务器)具有内置的方法来控制请求的超时。
可以通过以毫秒为单位设置服务器的超时来设置全局超时

server.timeout = config.PROCESSING_TIMEOUT;

可以在对Koa的特定请求中指定超时,如下所示:

ctx.request.socket.setTimeout(config.PROCESSING_TIMEOUT);