2017-12-14 43 views
0

저는 Angular를 처음 사용하고 있으며 모든 구성 요소에 대한 서비스를 만들었습니다. 이 서비스는 서버에서 데이터를 가져 오는 데 사용됩니다.각도로 일반 Http 서비스 만들기

내 클라이언트가 요청을 오프라인으로 저장하고 나중에 동기화하라는 메시지를 표시하지 않을 때까지 모든 것이 잘 작동했습니다.

이제 서버에 충돌하여 기존의 구성 요소가 첨부 된 서비스가 아닌 공통 서비스를 만들었습니다.

이것이 프로젝트에서 어떤 효과가 있는지 여부를 알고 싶었습니다.

이 방법이 괜찮 으면 네트워크 연결을 CommonRequestService으로 확인하고 DB에 요청을 저장합니다.

아래 코드를 확인하고 되돌리십시오. 나는 매우 감사 할 것이다.

이전 엔지니어 현황 서비스 여기에 CommonRequestService

export class engineerStatusService { 
    constructor(public http: Http) {} 
    // Post data to the server if user update the status 
    post(path: string, body: Object = {}): Observable <any> { 
     let headers = new Headers({ 
      'Content-Type': 'application/x-www-form-urlencoded', 
      'authorization': 'Bearer ' + localStorage.getItem('token') 
     }); 
     let options = new RequestOptions({ 
      headers: headers 
     }); 
     let data = body; 
     let urlSearchParams = new URLSearchParams(); 
     for (var key in body) { 
      urlSearchParams.append(key, body[key]); 
     } 

     let bodyData = urlSearchParams.toString(); 
     return this.http.post(`${API_URL}${path}`, bodyData, options) 
      .map(response => response.json()); 
    } 
} 

업데이트 엔지니어 현황 서비스

사용됩니다. 당신이 이미 그것을 한 이후

export class engineerStatusService { 
    constructor(private commonRequestService: CommonRequestService) {} 
    // Post data to the server if user update the status 
    post(path: string, body: Object = {}): Observable <Response> { 
     let data = body; 
     let urlSearchParams = new URLSearchParams(); 
     for (var key in body) { 
      urlSearchParams.append(key, body[key]); 
     } 
     let bodyData = urlSearchParams.toString(); 
     return this.commonRequestService.post(path, bodyData) 
      .map(response => response.json()) 
    } 
} 

CommonRequestService

export class CommonRequestService { 
    constructor(private http: Http) {} 
    post(path: string, body: Object = {}): Observable <Response> { 
     let headers = new Headers({ 
      'Content-Type': 'application/x-www-form-urlencoded', 
      'authorization': 'Bearer ' + localStorage.getItem('token') 
     }); 
     let options = new RequestOptions({ 
      headers: headers 
     }); 
     return this.http.post(`${API_URL}${path}`, body, options) 
    } 
} 

엔지니어 상태의 구성 요소

updateStatus(data) { 
    this.engineerStatusService 
     .post('status', data) 
     .subscribe(data => { 
      console.log(JSON.stringify(data)); 
     }, error => { 
      console.log('Error occured =>', error); 
     }) 
} 

답변

0

, 나는 당신이 단지 바로 지원이 필요한 것 같아요?

다시 그것을 할 의향이 있다면, 여기이 당신을 위해 리드 때문에 :

1 -

이 매우 강력 최근의 브라우저에 service workers, - Http Interceptors는, 그 캐치 모든 당신이 요청하고, 처리하기 전에 뭔가를하십시오. 이것은 내가 당신에게 권장하는 해결책입니다 : 강력하고, 내장되어 있으며, 적은 양의 코드가 필요합니다.

+0

HTTP 인터셉터 링크는 서비스 작업자 링크 만 엽니 다. 중요한 것은 일단 데이터를 가져 오면 오프라인 모드에서 데이터에 대한 모든 작업을 수행 할 수 있다는 것입니다. 캐싱은 필요하지 않습니다. 요청 및 본문 데이터를 데이터베이스의 대기열에 저장하려고합니다. 나중에 네트워크를 사용할 수 있습니다. 큐에서 모든 데이터를 서버로 보낼 수 있습니다. 내 주요 질문은 그들이 변경되었는지 또는 문제가 있는지 여부에 관계없이 변경 한 내용입니다. 도와주세요! – Jassi

+0

죄송합니다. 오래된 키보드, 그 문제를 편집했습니다. 당신이 묻는 것은 요격기로 여전히 가능합니다! 그리고 당신의 코드에 대해서, 나는 알 수 없습니다. 나는 그것이 작동 하는지를 테스트하기 위해 테스트해야합니다 ... – trichetriche

+0

테스트 할 수 있다면 좋을 것입니다. 나는 지금만큼 재 작업을하고 싶지 않다. 이것은 Angular의 첫 번째 프로젝트입니다. 다음 프로젝트를 통해 서비스 작업자와 HTTP 인터셉터가 어떻게 작동하는지 확인할 수 있습니다. 그러나 당분간 제 코드를 확인하고 진행해야하는지 안다면 알려주십시오. – Jassi