2017-12-14 25 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

あなたはすでにそれをやったので、私は右、あなただけのサポートを必要とすると思いますか?

あなたは再びそれを行うために喜んでいる場合は、ここでは2点のあなたのためにリードしているので:

1 -

2は非常に強力ですが、最近のブラウザでservice workers、 - Http Interceptorsは、そのキャッチあらゆるあなたが作ることを要求し、それらを処理する前に何かをする。これは私があなたにお勧めする解決策です。強力で、組み込みで、少ないコード量しか必要としません。

+0

[HTTPインターセプタ]リンクは、[サービスワーカー]リンクのみを開きます。 重要なことは、一度データが取得されると、ユーザーはオフラインモードでデータのアクティビティを実行できます。キャッシングは不要です。私は、要求とボディデータをデータベースのキューに保存することを考えています。後でネットワークが利用可能になるとき。すべてのデータをキューからサーバーに送信できます。 私の主な質問は、彼らが大丈夫か何か問題があるかどうかにかかわらず、私が行った変更です。助けてください! – Jassi

+0

申し訳ありませんが、古いキーボード、私はその問題を編集しました。あなたが尋ねるものは、インターセプタではまだ可能です!あなたのコードについてはわかりませんが、動作しているかどうかをテストする必要があります。 – trichetriche

+0

テストすることができれば素晴らしいと思います。私は今のところ、多くのリワークをしたくありません。これはAngularの私の最初のプロジェクトです。次のプロジェクトでは、サービスワーカーとHttpインターセプタがどのように機能するかを見ていきます。しかし、当分の間、私のコードをチェックして、進めていいかどうかを教えてください。 – Jassi

関連する問題