创建超时拦截器类:在适当的位置创建一个名为 TimeoutInterceptor 的拦截器类。这个类需要实现 NestInterceptor 接口,并重写 intercept 方法。
import {
Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import {
Observable, throwError, TimeoutError } from 'rxjs';
import {
catchError, timeout } from 'rxjs/operators';
@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const timeoutDuration = 5000; // 设置超时时间,单位是毫秒
return next.handle().pipe(
timeout(timeoutDuration),
catchError((err) => {
if (err instanceof TimeoutError) {
// 处理超时错误
return throwError(new Error('请求超时'));
}
return throwError(err);
}),
);
}
}
注册拦截器:在适当的地方(模块或控制器)使用 useInterceptor 方法将拦截器注册到应用程序中。
import {
Module } from '@nestjs/common';
import {
APP_INTERCEPTOR } from '@nestjs/core';
import {
TimeoutInterceptor } from './timeout.interceptor';
@Module({
providers: [
{
provide: APP_INTERCEPTOR,
useClass: TimeoutInterceptor,
},
],
})
export class AppModule {
}
现在,当你的请求处理程序执行时间超过设定的超时时间时,它将抛出一个 TimeoutError,然后在拦截器中进行处理。
请注意,可以根据你的具体需求来自定义拦截器的逻辑和超时时间。