Skip to content

上下文

上下文顾名思义就是呈上启下作用,通过上下文能获取到一些信息,比如请求信息,响应信息,中间件信息等等

先说过滤器

  • 新建一个过滤器aaa.filter.ts

注意

  • switchToHttp 切换到 http 上下文,然后在调用 getRequest 获取请求对象,getResponse 获取响应对象

  • 如果是 websocket、基于 tcp 的微服务等上下文,就分别调用 host.swtichToWs、host.switchToRpc 方法。

  • 举例如下:
ts
import { ArgumentsHost, Catch, ExceptionFilter } from "@nestjs/common";
import { Response } from "express";
import { AaaException } from "./AaaException";

@Catch(AaaException)
export class AaaFilter implements ExceptionFilter {
  catch(exception: AaaException, host: ArgumentsHost) {
    if (host.getType() === "http") {
      const ctx = host.switchToHttp();
      const response = ctx.getResponse<Response>();
      const request = ctx.getRequest<Request>();

      response.status(500).json({
        aaa: exception.aaa,
        bbb: exception.bbb,
      });
    } else if (host.getType() === "ws") {
    } else if (host.getType() === "rpc") {
    }
  }
}

再说守卫

注意

  • switchToHttp 切换到 http 上下文,然后在调用 getRequest 获取请求对象,getResponse 获取响应对象

  • 如果是 websocket、基于 tcp 的微服务等上下文,就分别调用 host.swtichToWs、host.switchToRpc 方法。

拦截器

注意

  • switchToHttp 切换到 http 上下文,然后在调用 getRequest 获取请求对象,getResponse 获取响应对象

  • 如果是 websocket、基于 tcp 的微服务等上下文,就分别调用 host.swtichToWs、host.switchToRpc 方法。