用户登录

使用 Interceptor,我们可以在请求的处理方法被调用之前或者调用之后去做一些事情,可以转换处理器返回的结果或者转换发生的异常等等。

在终端,先用命令生成一个拦截器看一下, nest generate,生成的是 interceptor ,拦截器,名字叫 logging,放在 core/interceptors 里面。

nest generate interceptor logging core/interceptors

回到项目,打开刚才用命令生成的这个拦截器检查一下, 拦截器是一个类,它要用 @Injecttable 装饰一下,这个类还得实施一下 NestInterceptor 接口, 这个接口要求类里面要添加一个 intercept 方法。

这个方法有两个参数,一个是 context,它是一个 ExecutionContext, 这个东西继承了 ArgumentsHost , 所以你可以根据应用的类型得到不同的参数,如果是 HTTP 应用,你可以使用 switchToHttp ,接着再调用 getRequest 得到请求,用 getResponse 得到响应。

除了在 ArgumentsHosts 里的东西以外, ExecutionContext 本身还提供了方法, 使用这个 getHandler 可以获取到请求的处理方法,用 getClass 可以得到请求处理方法所在的类。

拦截器的 intercept 方法的第二个参数的名字是 next,它是一个 CallHandler。

这个东西上面有个 handle 方法,方法返回的会是一个 Observable, 这个 Observable 经常会用在 nest 就里,它是反应式编程里的一种概念, 在 JavaScript 语言里使用它用的是 rxjs 这个模块。

具体你想了解它的话可以单独去学一下 rxjs 模块提供的功能,还有反应式编程里的一些概念。

在 intercept 方法里面需要手工调用 next 上的 handle 方法,就是 CallHandler 上的 handle 方法。

不调用这个方法,就不会调用请求的处理方法, 只有调用了 handle 这个方法才会调用请求的处理方法, handle 它会给我们返回 Observable , 所以我们可以使用它上面提供的大量的操作员方法去处理响应。

拦截器(Interceptors)《 Nest.js 应用框架:核心部件(3) 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点