Skip to content
On this page

通用上下文

Nest 提供了一些应用类来简化在不同应用上下文之间编写应用(例如 Nest HTTP 应用,微服务和 WebSockets 应用)。这些应用可以用于创建通用的守卫过滤器拦截器,可以工作在控制器,方法和应用上下文中。

ArgumentHost

ArgumentsHost 主要在 ExceptionFilter 中使用,用于处理并响应异常

javascript
catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const request = ctx.getRequest();
    const status = exception.getStatus();
    response.status(status).json({
      statusCode: status,
      timestamp: new Date().toISOString(),
      path: request.url,
    });
}

ExecutionContext

  1. Guards 中的 canActivate 方法
javascript
async canActivate(context: ExecutionContext): Promise<boolean> {
  const request = context.switchToHttp().getRequest();
  // ... 
}
  1. Interceptors 中的 intercept 方法
typescript
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
  const request = context.switchToHttp().getRequest();
  // ...
}
  1. Decorators 中的 createParamDecorator 方法
typescript
Tracing = createParamDecorator(
  (key: keyof TracingData, context: ExecutionContext) => {
    const contextType = context.getType<GqlContextType>();
    // ...
  },
);