在拦截器里面还可以拦截发生的异常,你可以根据一些条件转换应用 throw 的异常。
先去创建一个新的拦截器,nest generate 生成一个 interceptor,名字是 errors ,放在 core/interceptor 里面。
回到项目,找到创建的拦截器。
在执行了 next.handle 以后,给它接上一个管道,在管道里获取到发生的异常可以使用 catchError 这个操作员方法,给它一个回调,一个 error 参数。
throw 异常可以用一下 throwError ,新建一个 BadGatewayException。
打开 posts.controller,比如在这个 index 方法里面,. 暂时可以手工 throw 一个异常,用一下 ForbiddenException。
先在客户端试一下,用 GET 方法请求 posts 这个地址,得到的响应的状态码是 403。
下面在这个 index 方法的上面绑定一个拦截器,@UseInterceptors,用一下 ErrorsInterceptor。
再回到客户端,重新用 GET 请求 posts,这回得到的响应的状态是 502 ,表示 Bad Gateway。
这是因为在这个请求的处理方法上面绑定了一个叫 Errors 的拦截器,它现在做的事情就是获取异常,发生了异常,它就会把这个异常转换成一个 BadGateway 异常。