# Interceptors
An interceptor can intercept the request, response & error from an EchoFetch request. It requires the implementation of the following 3 methods:
/**
* Called before sending every request.
* @param request
*/
onRequest(request: EchoRequest): EchoRequest;
/**
* Called after every successful response.
* @param response
*/
onResponse(response: EchoResponse): EchoResponse;
/**
* Called after every failed response.
* @param error
*/
onError(error: EchoError): EchoError;
The diagram of when a specific method of an interceptor is called looks like this:
# Creating an interceptor
You can create an interceptor by implementing the interface EchoServiceInterceptor
export class TestInterceptor implements EchoServiceInterceptor {
/**
* Called before sending every request.
* @param request
*/
onRequest(request: EchoRequest): EchoRequest {
// Add extra headers to every request.
request.headers["test1"] = "interceptor-value1";
request.headers["test2"] = "interceptor-value2";
return request;
}
/**
* Called after every successful response.
* @param response
*/
onResponse(response: EchoResponse): EchoResponse {
return response;
}
/**
* Called after every failed response.
* @param error
*/
onError(error: EchoError): EchoError {
return response;
}
}
# Registering an interceptor
When creating the service using the EchoServiceBuilder
, you can add interceptors using:
addInterceptor(interceptor: EchoServiceInterceptor)
For example:
const service = new EchoServiceBuilder()
.setBaseUrl("https://localhost:3000")
.addInterceptor(new TestInterceptor())
.build(TestService);
You can add an interceptor inline, without implementing all of its members:
const service = new EchoServiceBuilder()
.setBaseUrl("https://localhost:3000")
.addInterceptor(<EchoServiceInterceptor> {
onRequest(request: EchoRequest): EchoRequest {
// Change the headers.
request.headers["test2"] = "interceptor-value2";
request.headers["test4"] = "interceptor-value4";
return request;
}
})
.build(TestService);