Rxjs 如何在nestjs拦截器中的takeUntil之后返回其他内容

Rxjs 如何在nestjs拦截器中的takeUntil之后返回其他内容,rxjs,nestjs,Rxjs,Nestjs,我想在拦截器内的请求关闭事件之后返回一个不同的状态代码。现在,下面的代码将返回状态200。在这种情况下,我应该在哪里抛出异常 从'rxjs'导入{fromEvent,observeable}; 从“rxjs/operators”导入{takeUntil}; @可注射() 导出类RequestCloseInterceptor实现了NestInterceptor{ 拦截(上下文:ExecutionContext,下一步:CallHandler):可观察{ const request=context.

我想在拦截器内的请求关闭事件之后返回一个不同的状态代码。现在,下面的代码将返回状态200。在这种情况下,我应该在哪里抛出异常

从'rxjs'导入{fromEvent,observeable};
从“rxjs/operators”导入{takeUntil};
@可注射()
导出类RequestCloseInterceptor实现了NestInterceptor{
拦截(上下文:ExecutionContext,下一步:CallHandler):可观察{
const request=context.switchToHttp().getRequest();
返回next.handle();
}
}

提前谢谢

似乎可以通过调用HttpResponseContext上的status()来更改状态代码

import { fromEvent, Observable } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

@Injectable()
export class RequestCloseInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    const request = context.switchToHttp().getRequest();
    const response = context.switchToHttp().getResponse().status(201); // or any code you like
    return next.handle().pipe(takeUntil(fromEvent(request, 'close')));
  }
}
从'rxjs'导入{fromEvent,observeable};
从“rxjs/operators”导入{takeUntil};
@可注射()
导出类RequestCloseInterceptor实现了NestInterceptor{

拦截(上下文:ExecutionContext,下一步:CallHandler):Observable

您试图返回什么状态代码?我找到了499,但这是非标准的。不确定是否有更合适的状态代码。意识到即使未触发请求关闭事件,此解决方案也会修改所有响应的状态代码,但我希望它仅在发生此特定事件时更改。好的,我意识到我可以使用此方法fromEvent(请求“关闭”).pipe(点击(()=>context.switchToHttp().getResponse().status(499)),)问题解决了。不确定这是不是最好的方法它似乎不会在任何地方实现或注册到http状态枚举。您最多可以创建自己的返回499的错误类实现。我打赌如果您按照此示例进行另一个HttpException,您可以编写自己的返回499的异常类。