I want caching into the "localstorage" the HttpRequest and HttpResponse classes from @angular/common/http.
The localstorage only accept string, therefore i want serialize/unserialize both objects (HttpRequest and HttpResponse) with JSON.stringfy() and JSON.parse().
The problem is HttpRequest and HttpResponse are both complex class with some ES6 Map (eg. HttpHeaders) and some getter/setter function, with JSON.stringfy() and JSON.parse() the serialization/unserialization don't return the same object and some information are lost.
There is a way for serialize/unserialize HttpRequest and HttpResponse class?
I'm searching for a complete serialization/unserialization (headers, params, body, etc)
In this example there is two method for serialize and unserialize HttpRequest, eg.:
function serializeRequest(angularRequest: HttpRequest): string {
return null; // to implement
}
function unserializeRequest(jsonRequest: string): HttpRequest {
return null; // to implement
}
// this is an example of request
const originalRequest = new HttpRequest('POST', 'https://angular.io/docs?foo=bar', {foo: true}, {
params: new HttpParams().set('verbose', 'true'),
headers: new HttpHeaders({
BAR: 'baz',
}),
reportProgress: true,
responseType: 'json',
withCredentials: true
});
// serializeRequest trasform HttpRequest in json format
const jsonRequest: string = serializeRequest(originalRequest);
// unserializeRequest trasform json format to HttpRequest
const unserializedRequest : HttpRequest = unserializeRequest(jsonRequest);
// unserializedRequest as same object of originalRequest
expect(originalRequest).toEqual(unserializedRequest);
the same serialization/unserialization for the response
function serializeResponse(angularResponse: HttpResponse): string {
return null; // to implement
}
function unserializeResponse(jsonResponse: string): HttpResponse {
return null; // to implement
}
// this is an example of response
const originalResponse = new HttpResponse({
headers: new HttpHeaders({
BAR: 'baz',
}),
status: 200,
statusText: 'OK',
url: 'https://angular.io/docs',
body: {foo: true}}
);
// serializeResponse trasform HttpResponse in json format
const jsonResponse: string = serializeResponse(originalRequest);
// unserializeResponse trasform json format to HttpResponse
const unserializedResponse: HttpResponse = unserializeResponse(jsonResponse);
// unserializedResponse as same object of originalResponse
expect(originalResponse).toEqual(unserializedResponse);