Faz sentido, mas agora ja foi, ja refatorei tudo, antes eu tinha uma classe para fazer as chamadas de cada entidade, exemplo:
import { Injectable } from '@angular/core';
import { Headers, Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
import { Child } from '../model/child'
@Injectable()
export class ChildService {
constructor(private http: Http) {}
private headers = new Headers({ 'Content-Type': 'application/json' });
private api = 'http://192.168.15.231:3000/child';
getChilds(): Promise<Child[]> {
return this.http.get(this.api)
.toPromise()
.then(response => response.json() as Child[])
.catch(this.handleError);
}
getChild(id: number): Promise<Child> {
const url = `${this.api}/${id}`;
return this.http.get(url)
.toPromise()
.then(response => response.json() as Child)
.catch(this.handleError);
}
createChild(child: Child): Promise<Child> {
return this.http
.post(this.api, JSON.stringify(child), { headers: this.headers })
.toPromise()
.then()
//.then(res => res.json() as Child)
.catch(this.handleError);
}
updateChild(child: Child): Promise<Child> {
const url = `${this.api}/${child.id}`;
return this.http
.put(url, JSON.stringify(child), { headers: this.headers })
.toPromise()
.then(() => child)
.catch(this.handleError);
}
deleteChild(child: Child): Promise<void> {
const url = `${this.api}/${child.id}`;
return this.http.delete(url, { headers: this.headers })
.toPromise()
.then(() => null)
.catch(this.handleError);
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error);
return Promise.reject(error.message || error);
}
}
Agora só tenho uma para tudo...
import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Group } from '../../models/group';
@Injectable()
export class Api {
//url: string = 'http://192.168.15.231:3000';
url: string = 'http://localhost:3000';
constructor(public http: HttpClient) {
}
get(endpoint: string, params?: any, reqOpts?: any) {
if (!reqOpts) {
reqOpts = {
params: new HttpParams()
};
}
// Support easy query params for GET requests
if (params) {
reqOpts.params = new HttpParams();
for (let k in params) {
reqOpts.params.set(k, params[k]);
}
}
return this.http.get(this.url + '/' + endpoint, reqOpts);
}
post(endpoint: string, body: any, reqOpts?: any) {
return this.http.post(this.url + '/' + endpoint, body, reqOpts);
}
put(endpoint: string, body: any, reqOpts?: any) {
return this.http.put(this.url + '/' + endpoint, body, reqOpts);
}
delete(endpoint: string, reqOpts?: any) {
return this.http.delete(this.url + '/' + endpoint, reqOpts);
}
patch(endpoint: string, body: any, reqOpts?: any) {
return this.http.put(this.url + '/' + endpoint, body, reqOpts);
}
}
Esta segunda abordagem me agrada bastante, o lance que estava pegando era apenas o retorno mesmo, ainda não entendi pq a necessidade de um stringify e depois um parse, sendo que eu também tinha entendido que ela ja fez um .json por debaixo dos panos, isso me rendeu boas horas de "aprendizado" (cabeçadas e se sentindo um retardado)... Só não consegui tipar dinamicamente como fazemos em Java, no seu exemplo o tipo é estático, por isso eu acabava criando um deste primeiro arquivo para cada entidade, eu idealizo apenas esta API para cuidar de tudo que eu precisar no sistema e o JSON do modelo "sincroniza os dados que vem do DB"
Estou apanhando com o "toast" agora... :-(