Skip to content

UseInterceptorsRes

此为请求前置拦截器,我们来看一下如何使用UseInterceptorsRes,下面是一个例子:

TIP

UseInterceptorsRes拦截器可以在Controller中使用,也可以在Router中使用。

demo.controller.ts

ts
import { Controller, PostMapping, UseInterceptorsRes } from 'http-typedi'
import { DemoService } from './demo.service'
import { DemoDetailReq } from './interfaces/demo.interface'

function InterceptorsRes(result) {
  console.log(result, 'Controller InterceptorsRes')
  const callError = result?.status !== 200 || result?.data?.code !== 200
  if (!callError) return result.data
  return Promise.reject(result) // or throw result
}

@Controller('demo')
@UseInterceptorsRes(InterceptorsRes)
export class DemoController {
  constructor(private readonly demoService: DemoService) {}
  @GetMapping('demoDetail/:id')
  getDemoDetail(confugre: DemoDetailReq) {
    return this.demoService.getDemoDetail(<AxiosRequestConfig>confugre)
  }
}

上述例子中,我们使用了UseInterceptorsRes,它的参数是一个函数,这个函数会在请求后执行,我们可以在这里做一些请求后的处理,比如判断返回的状态码,判断返回的数据等等。

上面的构造将拦截器附加到此控制器声明的每个处理程序。如果我们决定只限制其中一个, 我们只需在方法级别设置拦截器。下面是一个例子:

ts
@Controller('demo')
export class DemoController {
  constructor(private readonly demoService: DemoService) {}
  @GetMapping('demoDetail/:id')
  @UseInterceptorsRes(InterceptorsRes)
  getDemoDetail(confugre: DemoDetailReq) {
    return this.demoService.getDemoDetail(<AxiosRequestConfig>confugre)
  }
}

如果你需要绑定全局拦截器, 详情可查看全局拦截器