Skip to content

Instantly share code, notes, and snippets.

@elbakramer
Created October 2, 2018 06:08
Show Gist options
  • Save elbakramer/2ba3808bff0591569c35211c19f51441 to your computer and use it in GitHub Desktop.
Save elbakramer/2ba3808bff0591569c35211c19f51441 to your computer and use it in GitHub Desktop.
Angular HttpBackend implementation using request library
import { HttpClient } from '@angular/common/http';
import { RequestBackend } from './request-backend';
import * as request from 'request';
let backend = new RequestBackend(request);
let http = new HttpClient(backend);
let response = http.get('https://www.google.com/');
response.subscribe(res => console.log(res));
import { HttpBackend, HttpRequest, HttpEvent, HttpResponse, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
export class RequestBackend extends HttpBackend {
constructor(private request: any) {
super()
}
handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {
return new Observable((observer) => {
let url = req.urlWithParams;
let method = req.method;
let headers = {};
for (let key of req.headers.keys()) {
headers[key] = req.headers.get(key);
}
return this.request({
url,
method,
headers,
}, (err, res, body) => {
if (err) {
observer.error(err);
return observer.complete();
}
let headers = new HttpHeaders();
for (let key in res.headers) {
headers.set(key, res.headers[key]);
}
let status = res.statusCode;
let statusText = res.statusMesage;
let url = res.url;
let response = new HttpResponse({
body,
headers,
status,
statusText,
url,
});
observer.next(response);
return observer.complete();
});
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment