首页 > 解决方案 > 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();
});

标签: node.jssettimeoutkoa

解决方案


Koa(或者更确切地说是节点的 http 服务器)有一个内置的方法来控制请求的超时。
可以通过在 ms 中设置服务器的超时来设置全局超时

server.timeout = config.PROCESSING_TIMEOUT;

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

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

推荐阅读