问题描述
我正在尝试使用自定义中间件为传入的请求设置超时,但是没有引发错误,似乎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);